9

現在のプロセスのPerl実行可能ファイルへの絶対パスを取得する方法はありますか?

$^XPerlの実行可能ファイル名が表示されますが、ドキュメントには相対パスになることがあると記載されており、これはたとえばOSXでも当てはまるようです。

ExtUtils::MakeMaker私のOSXで生成されるMakefileには絶対パスが含まれているため、絶対パスを見つけるための魔法があるようです

PERL = /usr/local/bin/perl
FULLPERL = /usr/local/bin/perl

しかし、それがどのようにこれを行うのか、または魔法が他の人にすぐにアクセスできるかどうかはわかりません。

編集:情報を提供してくれたボロディンに感謝し$Config{perlpath}ます。でこれをExtUtils手に取って、私はでこの一口を見つけました。これは、MakeMakerが正しいExtUtils::MM_Unix::_fixin_replace_shebangシバンラインに置き換えるために使用するものだと思い#!perlます。

if ( $Config{startperl} =~ m,^\#!.*/perl, ) {
    $interpreter = $Config{startperl};
    $interpreter =~ s,^\#!,,;
}
else {
    $interpreter = $Config{perlpath};
}
4

4 に答える 4

11

あなたが探しているのはです$Config{perlpath}

コードの移植性を高めたい場合は、その値にファイルタイプを追加する必要があります。これはperlportドキュメントに記載されています。それ以外の場合、必要なのはこれだけです。

use Config;
my $perl = $Config{perlpath};
于 2012-05-01T04:16:52.147 に答える
0

コアのConfigモジュールから取得できます。

use Config;
say $Config{perl5};   # current perl binary

それには常に絶対パスが含まれているべきだと思いますが、それを保証することはできません

于 2012-04-30T23:47:48.417 に答える
-1

Perlには、相対パスを絶対パスに変換できるコアモジュールFile::Specが含まれています。

my $full_path_to_perl = File::Spec->rel2abs($^X);
于 2012-04-30T21:10:14.510 に答える
-1

perl6(raku)の場合:$*EXECUTABLE-NAME現在実行中のRakuインタープリターのフルパスが含まれています(sys.executablePythonの場合など)

完全なコマンドラインを取得するには:

say ($*EXECUTABLE-NAME, $*PROGRAM-NAME, |@*ARGS).join(' ');

可変ドキュメントの詳細

于 2020-03-04T21:04:22.273 に答える