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

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

1. 错误方式之一

  1. use Cwd;

  2. my $cwd = getcwd();
  3. print "CWD PATH = ",$cwd,"\n";
这种方式:
a.在本机登录用户在程序所在目录下运行该程序时 正确--获得该程序的绝对路径。
b.本机登录用户在根目录下运行和远程用户使用SSH调用获得的 路径皆为“/root”

2. 错误方式之二

  1. #!/usr/bin/perl

  2. use Cwd;
  3. use File::Basename;

  4. my $cwd;
  5. print "\$0 = ",$0,"\n";
  6. if($=~ m{^/})
  7. {
  8.   $cwd = dirname($0);
  9.   $cwd .='/';
  10. }
  11. else
  12. {
  13.   my $dir = getcwd();
  14.   $cwd = dirname("$dir\/$0");
  15. }
  16. print "PATH = ",$cwd,"\n";
这种方式:
a. 本机登录用户在程序所在目录下使用
  1. #./test_program.pl
运行该程序时会出错--绝对路径会多一个“.”。如“/opt/xxx/.”。

3. 正确的方式
  1. use File::Spec;
  2. print "\n";
  3. my $path_curf = File::Spec->rel2abs(__FILE__);
  4. print "C PATH = ",$path_curf,"\n";
  5. my ($vol, $dirs, $file) = File::Spec->splitpath($path_curf);
  6. print "C Dir = ", $dirs,"\n";
使用这种方式就能任何场景下得到正确的当前程序的绝对路径“$dir”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北雨南萍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值