Perl, почему @INC отличается? - PullRequest
9 голосов
/ 01 марта 2012

У меня есть простой сценарий Perl, который выводит @INC в следующем виде:

#!/usr/bin/perl
print $_, "\n" for @INC;

Я выполняю сценарий двумя различными способами с ./test.pl и perl test.pl, вывод следующий:

[neevek@~/bin]$ ./test.pl 
/Library/Perl/5.12/darwin-thread-multi-2level
/Library/Perl/5.12
/Network/Library/Perl/5.12/darwin-thread-multi-2level
/Network/Library/Perl/5.12
/Library/Perl/Updates/5.12.3
/System/Library/Perl/5.12/darwin-thread-multi-2level
/System/Library/Perl/5.12
/System/Library/Perl/Extras/5.12/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.12
.   
[neevek@~/bin]$ perl test.pl 
/opt/local/lib/perl5/site_perl/5.12.3/darwin-multi-2level
/opt/local/lib/perl5/site_perl/5.12.3
/opt/local/lib/perl5/vendor_perl/5.12.3/darwin-multi-2level
/opt/local/lib/perl5/vendor_perl/5.12.3
/opt/local/lib/perl5/5.12.3/darwin-multi-2level
/opt/local/lib/perl5/5.12.3
/opt/local/lib/perl5/site_perl
/opt/local/lib/perl5/vendor_perl
.   

Мой вопрос: что скрывается за выполнением сценария perl с ./script.pl и perl script.pl?что заставляет скрипт выводить разные @INC?

Ответы [ 2 ]

19 голосов
/ 01 марта 2012

Сценарий выполняет perl из /usr/bin через строку shebang, но при запуске сценария из командной строки используется другой двоичный файл perl, из /opt/somewhere (путь см. В which perl)Вы можете использовать #!/usr/bin/env perl, чтобы оба параметра вели себя одинаково.

10 голосов
/ 01 марта 2012

У вас есть две установки perl в вашей системе.

Когда вы выполняете ./test.pl, выбирается /usr/bin/perl, как написано в первой строке вашего скрипта.

Когда вы выполняете perl test.pl, это первый найденный perl в переменной окружения PATH. Введите which perl, чтобы узнать, где он находится.

...