有没有办法获得当前进程的Perl可执行文件的绝对路径?
$ ^ X将为我提供Perl可执行文件名,但是文档声明它有时会是一个相对路径,例如在OS X上这似乎是正确的。
ExtUtils :: MakeMaker似乎有一些神奇的东西可以找到绝对路径,因为它在我的OS X上生成的Makefile包含
PERL = /usr/local/bin/perl
FULLPERL = /usr/local/bin/perl
但我不知道它是如何做到的,或者其他人是否可以随时获取魔法。
编辑:感谢Borodin提出$Config{perlpath}
小费。在ExtUtils中对此进行了解决,我在ExtUtils :: MM_Unix :: _ fixin_replace_shebang中找到了这个小窍门,我猜这是MakeMaker使用正确的shebang代替#!perl的内容。
if ( $Config{startperl} =~ m,^\#!.*/perl, ) { $interpreter = $Config{startperl}; $interpreter =~ s,^\#!,,; } else { $interpreter = $Config{perlpath}; }
答案 0 :(得分:8)
我认为你要找的是$Config{perlpath}
。
如果您希望代码非常便携,则可能需要将文件类型附加到该值;这在perlport
文档中有所描述。否则你只需要这个:
use Config;
my $perl = $Config{perlpath};
答案 1 :(得分:1)
答案 2 :(得分:0)
Perl包含核心模块File::Spec,它可以将相对路径转换为绝对路径。
my $full_path_to_perl = File::Spec->rel2abs($^X);
答案 3 :(得分:-1)
对于perl6(raku):$*EXECUTABLE-NAME
包含当前运行的Raku解释器的完整路径(如Python的sys.executable
)
要获取完整的命令行:
say ($*EXECUTABLE-NAME, $*PROGRAM-NAME, |@*ARGS).join(' ');
Variable Documentation中的更多内容