Вопрос по perl – Получение абсолютного пути к исполняемому файлу perl для текущего процесса

6

Есть ли способ получитьabsolute путь к исполняемому файлу Perl для текущего процесса?

$ ^ X даст мне имя исполняемого файла Perl, но в документе говорится, что иногда это будет относительный путь, и это, похоже, верно для OS X, например.

ExtUtils :: MakeMaker, похоже, обладает магией, чтобы найти абсолютный путь, так как Makefile, который он генерирует на моей OS X, содержит

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

но я понятия не имею, как это происходит или магия легко доступна другим.

РЕДАКТИРОВАТЬ: Спасибо Бородина за$Config{perlpath} совет. Разбираясь с этим в ExtUtils, я нашел этот фрагмент в ExtUtils :: MM_Unix :: _ fixin_replace_shebang, который, как я полагаю, использует MakeMaker для замены #! Perl на правильную строку shebang.

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

Ваш Ответ

3   ответа
1

Вы можете получить это через ядроконфиг модуль.

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

яthink это всегда должно содержать абсолютный путь, но я не могу его гарантировать.

Использование $ Config {perl5} дает мне Perl, который является первым в моем PATH, тогда как $ Config {perlpath} дает мне Perl, который в данный момент выполняется.
Документация для$Config{perl5} довольно бесполезно: & quot; эта переменная содержит полный путь (если есть) к ранее установленному perl5.005 или новее, подходящий для запуска сценария для определения inc_version_list. & quot;
0

Perl включает основной модульФайл :: Spec который может переводить относительные пути в абсолютные пути.

my $full_path_to_perl = File::Spec->rel2abs($^X);
Это не сработает во многих случаях. Часто$^X просто говоритperl в таком случаеrel2abs даст вам путь к CWD, что, вероятно, неправильно.
8

Я думаю, что вы ищете$Config{perlpath}.

Если вы хотите, чтобы ваш код был очень переносимым, вам, возможно, придется добавить тип файла к этому значению; это описано вperlport документация. В противном случае все, что вам нужно, это:

use Config;
my $perl = $Config{perlpath};

Похожие вопросы