Как я могу убедиться, что моя программа находит интерпретатор perl на разных платформах? - PullRequest
2 голосов
/ 02 ноября 2009

Мой Perl-скрипт работает под несколькими ОС, включая unix и Win32.В каждой ОС есть уникальная настройка Perl, при которой интерпретатор perl находится в разных каталогах.

Есть ли способ указать интерпретатор в строке shebang, например:

#!which perl

Ответы [ 5 ]

6 голосов
/ 02 ноября 2009

Установите ваши скрипты с помощью обычных инструментов CPAN. Во время сборки они берут Perl, который вы использовали для запуска сценария сборки, и вставляют его в строку shebang. Кроме того, вы убедитесь, что в используемом вами perl установлены зависимости.

Например, у вас вверху вашего скрипта:

#!perl

Используя обычный процесс распространения модулей (см. Мой App :: PPI :: Dumper в качестве примера),

$ perl5.10.0 Makefile.PL

Устанавливая его, ExtUtils :: Makemaker или Module :: Build перезаписывает шебанг с использованием пути perl, который вы использовали в сценарии сборки:

 #!/usr/local/perls/perl-5.10.0-rc2/bin/perl

 eval 'exec /usr/local/perls/perl-5.10.0-rc2/bin/perl  -S $0 ${1+"$@"}'
     if 0; # not running under some shell

Когда вы распространяете свой скрипт как полный дистрибутив, вы получаете все функции набора инструментов бесплатно, такие как автоматическая установка зависимостей. Это делает жизнь намного проще.

3 голосов
/ 02 ноября 2009

В некоторых Unix-системах (и, предположительно, подобных Cygwin и MinGW / Msys) вы можете использовать env для поиска perl в PATH следующим образом:

#!/usr/bin/env perl
2 голосов
/ 02 ноября 2009

Один из использованных трюков - иметь линию

 #!/usr/bin/env perl

, который запускает Perl для вас независимо от того, где он находится.

Но ... Вы должны заметить, что это может привести к проблемам, если в системе имеется более одного интерпретатора Perl. Например, я использую Ubuntu Linux, а Perl является компонентом системы. Но интерпретатор Perl системы Ubuntu не в хорошей форме из-за некоторых сомнительных решений по настройке, предпринятых людьми из Debian, поэтому установка таких вещей, как модули CPAN, довольно сложна. Таким образом, я всегда использую свой собственный скомпилированный perl в своем пользовательском пространстве для своей работы. Некоторые из сценариев Ubuntu Perl используют вышеуказанную форму и, таким образом, прерываются, если мне удается запустить их из командной строки, потому что мой интерпретатор perl находится на пути к стандартному Perl Ubuntu.

1 голос
/ 02 ноября 2009
Команда

man perlrun дает несколько ответов на этот вопрос, но ни одна из них не является полностью переносимой.

0 голосов
/ 02 ноября 2009

Это обсуждается на http://www.perlmonks.org/index.pl?node_id=118460

Короче говоря, что бы вы ни делали, вы в конечном итоге получите путь к двоичному файлу в тот или иной момент, и если /usr/bin/perl не работает, то Perl был неправильно настроен.

(Windows не заботится о линии Шебанга)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...