如何获得perl可执行文件的清理绝对路径,但保留符号链接? (来自$^X
变量或无论如何)
示例perl可执行文件:
$ ls -l /opt/local/bin/perl
lrwxr-xr-x 1 root admin 8 18 nov 02:46 /opt/local/bin/perl -> perl5.12
无论我如何运行perl解释器,我都想在我的脚本中获取/opt/local/bin/perl
。
测试代码(changesbang.pl):
use strict;
use warnings;
use Cwd;
use File::Spec;
use Config;
my $fmt = "%-25s: %s\n";
printf $fmt, "The value of ^X", $^X;
printf $fmt, "Cwd::realpath", Cwd::realpath($^X);
printf $fmt, "Cwd::abs_path", Cwd::abs_path($^X);
printf $fmt, "File::Spec->cannonpath", File::Spec->canonpath($^X);
printf $fmt, "File::Spec->rel2abs", File::Spec->rel2abs($^X);
printf $fmt, "Config{perlpath}", $Config{perlpath};
现在以
运行上面的内容$ ../../../../../opt/local/bin/perl changesbang.pl
The value of ^X : ../../../../../opt/local/bin/perl
Cwd::realpath : /opt/local/bin/perl5.12
Cwd::abs_path : /opt/local/bin/perl5.12
File::Spec->cannonpath : ../../../../../opt/local/bin/perl
File::Spec->rel2abs : /Users/jm/Develop/perl/changesbang/../../../../../opt/local/bin/perl
Config{perlpath} : /opt/local/bin/perl5.12
没人回复我想要的/opt/local/bin/perl
问题是:如何使用约束获取所需的perl可执行路径:
答案 0 :(得分:2)
我建议你试试
use File::Spec::Functions qw( rel2abs canonpath );
print canonpath(rel2abs($^X));
或者,有
use Cwd::Ext 'abs_path_nd';
print abs_path_nd($^X);
答案 1 :(得分:0)
如果不解析符号链接,你所要求的是不可能做到的。
/a/b/c/d/e/../../../../../opt/local/bin/perl
不一定与
相同/opt/local/bin/perl
如果a
,b
,c
,d
或e
中的任何一个是符号链接。这就是canonpath
不改变它的原因。
您正在尝试在您的计划中引入错误。