Perl, Почему @INC отличается?

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

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

Я выполняю script двумя разными способами: ./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 с ./script.pl и perl script.pl? что заставляет script выводить разные @INC?

2 ответа

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


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

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

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

licensed under cc by-sa 3.0 with attribution.