2012-03-01 14 views
8

Ho un semplice script Perl che stampa @INC come la seguente:Perl, perché @INC è diverso?

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

ho eseguire lo script in 2 modi diversi con ./test.pl e perl test.pl, l'output come il seguente:

[[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 
. 

mio la domanda è: cosa c'è dietro le quinte per l'esecuzione di uno script perl con ./script.pl e perl script.pl? cosa causa la produzione dello script diverso @INC?

+6

Diversi file binari 'perl'? Cosa dice 'quale perl 'dice? – cHao

+0

'che perl' dice'/opt/local/bin/perl', ma ho usato '/ usr/bin/perl' per lo shabang. siete tutti corretti, grazie ... ma potevo averlo perso ... – neevek

+1

lezione Unix # 1 (che do a tutti i neofiti del team). MAI SEMPRE MAI MAI contare sulla directory corrente o sul PERCORSO. Utilizzare SEMPRE il percorso esplicito completo. – DVK

risposta

19

Lo script viene eseguito perl dal /usr/bin attraverso la linea shebang, ma lanciando lo script dalla linea di comando utilizza un diverso perl binario, da /opt/somewhere (vedi which perl per il percorso). È possibile utilizzare #!/usr/bin/env perl per far sì che entrambe le opzioni si comportino allo stesso modo.

10

Si dispone di due installazioni perl sul sistema.

Quando si esegue ./test.pl, è /usr/bin/perl scelto, come scritto sulla prima riga del proprio script.

Quando si esegue perl test.pl, è il primo perl trovato nella variabile di ambiente PATH scelta. Digita which perl per scoprire dove si trova.

Problemi correlati