2012-03-01 20 views
8

Tengo un simple script en Perl que imprime @INC como los siguientes:Perl, ¿Por qué @INC es diferente?

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

que ejecutar el script de 2 maneras diferentes con ./test.pl y perl test.pl, la salida como la siguiente:

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

Mi La pregunta es: ¿qué hay detrás de las escenas para ejecutar una secuencia de comandos perl con ./script.pl y perl script.pl? ¿Qué hace que la secuencia de comandos salga diferente @INC?

+6

Diferentes binarios de 'perl'? ¿Qué dice 'which perl'? – cHao

+0

'which perl' dice'/opt/local/bin/perl', pero utilicé '/ usr/bin/perl' para el shabang. todos están en lo cierto, gracias ... pero podría haberme perdido eso ... – neevek

+1

lección Unix # 1 (que doy a todos los novatos en el equipo). NUNCA SIEMPRE confíe en el directorio actual o en la RUTA. SIEMPRE use una ruta explícita completamente calificada. – DVK

Respuesta

19

El script se ejecuta perl de /usr/bin a través de la línea de tinglado, pero el lanzamiento de la secuencia de comandos desde la línea de comandos utiliza un perl binaria diferente, desde /opt/somewhere (ver which perl de la ruta). Puede usar #!/usr/bin/env perl para hacer que ambas opciones tengan el mismo comportamiento.

10

Tiene dos instalaciones perl en su sistema.

Cuando ejecuta ./test.pl, se elige /usr/bin/perl, como está escrito en la primera línea de su secuencia de comandos.

Cuando ejecuta perl test.pl, es el primer perl encontrado en la variable de entorno PATH que se elige. Escriba which perl para descubrir dónde está.

Cuestiones relacionadas