如何获得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的可执行路径:
发布于 2013-05-04 09:40:30
我建议你试试
use File::Spec::Functions qw( rel2abs canonpath );
print canonpath(rel2abs($^X));或者,有
use Cwd::Ext 'abs_path_nd';
print abs_path_nd($^X);发布于 2013-05-04 16:20:59
如果不解析符号链接,就不可能正确地完成您所要求的操作。
/a/b/c/d/e/../../../../../opt/local/bin/perl不一定与
/opt/local/bin/perl如果a、b、c、d或e中的任何一个都是符号链接。这就是为什么canonpath不改变它的原因。
你想在你的程序中引入一个bug。
https://stackoverflow.com/questions/16372713
复制相似问题