您的位置:首页 > 其它

Perl 获取当前程序的绝对路径与勘误

2013-02-23 21:42 288 查看
前言
  你写的脚本(或程序)的应用场景肯定有很多,如:本机登录用户在程序所在的目录下运行;本机登录用户在根目录下运行;或者是远程用户使用SSH调用。
  而此时,你的程序涉及到一些文件的读/写操作,这时就需要以当前程序所在绝对路径为文件路径坐标基点--以定位读/写文件的所在,才能成功地读写文件。

1. 错误方式之一

use Cwd;

my $cwd = getcwd();

print "CWD PATH = ",$cwd,"\n";

这种方式:
a.在本机登录用户在程序所在目录下运行该程序时正确--获得该程序的绝对路径。
b.本机登录用户在根目录下运行和远程用户使用SSH调用获得的路径皆为“/root”

2. 错误方式之二

#!/usr/bin/perl

use Cwd;

use File::Basename;

my $cwd;

print "\$0 = ",$0,"\n";

if($0 =~ m{^/})

{

  $cwd = dirname($0);

  $cwd .='/';

}

else

{

  my $dir = getcwd();

  $cwd = dirname("$dir\/$0");

}

print "PATH = ",$cwd,"\n";

这种方式:
a. 本机登录用户在程序所在目录下使用

#./test_program.pl

运行该程序时会出错--绝对路径会多一个“.”。如“/opt/xxx/.”。

3. 正确的方式

use File::Spec;

print "\n";

my $path_curf = File::Spec->rel2abs(__FILE__);

print "C PATH = ",$path_curf,"\n";

my ($vol, $dirs, $file) = File::Spec->splitpath($path_curf);

print "C Dir = ", $dirs,"\n";

使用这种方式就能任何场景下得到正确的当前程序的绝对路径“$dir”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PERL