Question

J'ai un script perl simple qui imprime @INC comme suit:

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

J'exécute le script de 2 manières différentes avec ./test.pl et perl test.pl, la sortie comme ce qui suit:

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

Ma question est: ce qui se passe dans les coulisses pour exécuter un script perl avec ./script.pl et perl script.pl? Ce qui fait que le script sortit différent @INC?

Était-ce utile?

La solution

Le script s'exécute perl de /usr/bin à travers la ligne Shebang, mais le lancement du script à partir de la ligne de commande utilise un autre perl binaire, de /opt/somewhere (voir which perl pour le chemin). Vous pouvez utiliser #!/usr/bin/env perl Pour faire en sorte que les deux options se comportent de la même manière.

Autres conseils

Vous avez deux installations Perl sur votre système.

Lorsque vous exécutez ./test.pl, son /usr/bin/perl qui est choisi, comme écrit sur la première ligne de votre script.

Lorsque vous exécutez perl test.pl, c'est le premier perl trouvé dans le PATH variable d'environnement choisie. Taper which perl pour découvrir où il se trouve.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top