【问题标题】:Perl, Why is @INC different?Perl,为什么@INC 不同?
【发布时间】:2012-03-19 23:31:39
【问题描述】:

我有一个简单的 Perl 脚本,它打印出 @INC 如下:

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

我使用./test.plperl 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.plperl script.pl 执行 perl 脚本的幕后是什么?是什么导致脚本输出不同的@INC

【问题讨论】:

  • 不同的perl 二进制文件? which perl 说什么?
  • which perl 表示/opt/local/bin/perl,但我用/usr/bin/perl 表示沙邦。你们都是对的,谢谢……但我可能错过了……
  • Unix 第 1 课(我给团队中的所有新手)。永远不要依赖当前目录或 PATH。始终使用明确的完全限定路径。
  • 我想说至少在某些情况下依赖环境是有意义的,例如它可以很容易地用Perlbrew 切换 Perls。

标签: perl library-path


【解决方案1】:

脚本正在通过 shebang 行从 /usr/bin 执行 perl,但从命令行启动脚本使用来自 /opt/somewhere 的不同 perl 二进制文件(有关路径,请参阅 which perl)。您可以使用#!/usr/bin/env perl 使两个选项的行为相同。

【讨论】:

    【解决方案2】:

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

    当您执行./test.pl 时,会选择/usr/bin/perl,如脚本第一行所述。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2011-10-31
      • 2020-07-15
      • 2010-11-05
      • 1970-01-01
      • 2013-07-16
      相关资源
      最近更新 更多