9

我有一个简单的 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
.   

./script.pl我的问题是:使用and执行 perl 脚本的幕后是什么perl script.pl?是什么导致脚本输出不同@INC

4

2 回答 2

19

该脚本是通过 shebang 行执行perl/usr/bin,但从命令行启动脚本使用不同的perl二进制文件 from /opt/somewherewhich perl路径见 )。您可以使用#!/usr/bin/env perl使两个选项的行为相同。

于 2012-03-01T13:10:37.323 回答
10

您的系统上有两个 perl 安装。

当您执行./test.pl时,它/usr/bin/perl就是被选中的,如脚本第一行所写。

当您执行时,它是在环境变量中perl test.pl找到的第一个 perl被选择。PATH键入which perl以发现它在哪里。

于 2012-03-01T13:12:21.103 回答