首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

Perl 获取现阶段程序的绝对路径与勘误

2013-02-24 
Perl 获取当前程序的绝对路径与勘误前言你写的脚本(或程序)的应用场景肯定有很多,如:本机登录用户在程序所

Perl 获取当前程序的绝对路径与勘误
前言  你写的脚本(或程序)的应用场景肯定有很多,如:本机登录用户在程序所在的目录下运行;本机登录用户在根目录下运行;或者是远程用户使用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”。

  • 热点排行