Perl, pourquoi @inc est-il différent?
-
14-11-2019 - |
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
?
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.