2012-03-01 6 views
8

私は、次のよう@INCを出力する簡単なPerlスクリプトを持っている:Perl、なぜ@INCが違うのですか?

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

私は、次のよう./test.plperl test.plとの2種類の方法、出力にスクリプトを実行します。

[[email protected]~/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 
. 
[[email protected]~/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を出力する原因は何ですか?

+6

異なる 'perl'バイナリ? 'perlは何を言っているのですか? – cHao

+0

'perl'は'/opt/local/bin/perl'と言っていますが、シャバンには '/ usr/bin/perl'を使いました。あなたはすべて正しいです、ありがとう...しかし、私はそれを逃したかもしれません... – neevek

+1

私はチームのすべての初心者に与えるUNIX授業#1。決して今までのところ、現在のディレクトリやPATHに頼ってはいけません。明示的に完全修飾パスを使用してください。 – DVK

答えて

19

スクリプトは(パスのwhich perl参照)シェバングラインを介して/usr/binからperlを実行するが、コマンドラインからスクリプトを起動する/opt/somewhereから、異なるperlバイナリを使用しています。 #!/usr/bin/env perlを使用すると、両方のオプションを同じように動作させることができます。

10

システムに2つのperlインストールがあります。

./test.plを実行すると、スクリプトの最初の行に書かれているように、/usr/bin/perlが選択されます。

perl test.plを実行すると、これは最初に選択されたPATH環境変数にあるperlです。どこにあるのかを調べるにはwhich perlと入力してください。

関連する問題