2015-05-21 8 views
1

Я установил ActivePerl 5.20.2 сегодня на Mac OS X 10.9.5 Проверка версии perl в терминале (perl -v) Я вижу 5.20.2 Так что все кажется в порядке. Но .. Когда я запускаю скрипты CGI, скрипт работает под встроенным perl (который равен 5.16) (если используется #!/usr/bin/perl). Если я использую #!/usr/local/ActivePerl5.20.2/bin/perl, тогда он работает под 5.20.2, что требуется.Как использовать путь по умолчанию для ActivePerl 5.20 Mac OS X (/ usr/bin/perl) вместо/usr/local/ActivePerl ...?

вопрос: не является ли это каким-то образом можно изменить каталог для использования в моих сценариях с #!/usr/local/ActivePerl5.20.2/bin/perl простых и знакомыми #/USR/бен/Perl ведения работает под ActivePerl вместо встроенного в

мне нужно!. для переопределения версии системы по умолчанию с новым ActivePerl.

Я буду признателен за ваши подробные ответы (с указанием файлов и каталогов, где они находятся), если они должны быть изменены для реализации спасения.

Спасибо!

+1

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

+1

Кажется, что '#!/Usr/local/ActivePerl5.20.2/bin/perl' находится до'/usr/bin/perl' в '' PATH 'вашей оболочки. Можете ли вы установить $ PATH в среде, где выполняются сценарии CGI? Затем вы можете разместить '/ usr/local/ActivePerl5.20.2/bin /' ранее в пути и вызвать '#!/Usr/bin/env perl'. Это * может * работать, но указывать на конкретную версию лучше. –

+0

@ SinanÜnür Спасибо. Это была опечатка (и копирование с опечаткой). Мои сценарии, конечно, не имеют опечаток в линиях shebang))) – Arsenii

ответ

2

Во-первых, вместо того, чтобы указать конкретный путь к интерпретатору Perl в сценарии:

#! /usr/local/ActivePerl5.20.2/bin/perl 

или

#! /usr/bin/perl 

Укажите это:

#! /usr/bin/env perl 

Найдет первый исполняемый интерпретатор Perl в вашем $PATH, а затем используйте его для выполнения Perl sc НИИИТ. Таким образом, вместо необходимости изменять вашу программу, вам нужно изменить только переменную $PATH.

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

Я также рекомендую поставить /usr/local/bin в качестве первой записи в вашем $PATH. Затем соедините исполняемые файлы, которые вы хотите запустить, в этот каталог.Вы можете использовать что-то вроде этого, чтобы создать ссылки:

for file in $/usr/local/ActivePerl5.20.2/bin/* 
do 
    basename=$(basename $file) 
    ln -s "$file" "/usr/local/bin/$basename" 
done 

Таким образом, все программы, которые вы хотите выполнить в том же каталоге, что делает заходящего $PATH намного проще. Я даже положил /usr/local/bin до /usr/bin и /bin, потому что я хочу иметь возможность переопределить по умолчанию для системы.

+0

Спасибо! Не могли бы вы рассказать мне, пожалуйста, как определить переменную $ PATH? Это то, что в .bash_profile в каталоге пользователя? Можете ли вы, пожалуйста, показать мне простой пример? У меня есть теперь следующие строки: PATH =/usr/local/ActivePerl-5.20/bin: $ PATH PATH =/usr/local/ActivePerl-5.20/site/bin: $ PATH export PATH – Arsenii

+0

Я хотел бы переопределить версия системы по умолчанию. Это то, что я хочу)) – Arsenii

+1

Вы забыли, что OP работает под сценариями CGI. ИМХО, не рекомендуется помещать '#!/Usr/bin/env perl' в нечто иное, кроме сценариев командной строки throwaway. Гораздо лучше просто упаковать его с помощью 'Makefile.PL'. Тогда не имеет значения, что еще происходит. Сервер получает право «perl» каждый раз. –

4

вопрос: не является ли это каким-то образом можно изменить каталог для использования в моих сценариях с #!/usr/local/ActivePerl5.20.2/bin/perl простых и знакомым #!/usr/bin/perl хранения работает под ActivePerl вместо встроенного в

Не даже попробовать. , Таким образом, это проклятие, а не спасение. Важной особенностью является возможность задания конкретного интерпретатора, который будет обрабатывать ваши скрипты.

Вместо этого упакуйте свой CGI-скрипт в качестве простого модуля CPAN. Затем установите его, используя знакомый

$ /usr/local/ActivePerl5.20.2/bin/perl Makefile.PL 
$ make install 

рутина. Строка shebang будет автоматически скорректирована с учетом perl, который использовался для сборки и установки вашего пакета.

+1

Спасибо за ваш ответ! – Arsenii