J'essaie de comprendre comment perl
traite de la ligne shebang. Pour penser que tout interpréteur mentionné dans la "position de commande" sur la ligne de commande aurait préséance sur celui mentionné dans la ligne shebang. Par exemple, si un script exécutable appelé demo
ressemble à ceciComment Perl gère-t-il la ligne shebang?
#!/usr/local/bin/perl-5.00503
printf "$]\n";
... alors j'observiez les points suivants:
$ ./demo
5.00503
% /usr/local/bin/perl-5.22 ./demo
5.022003
OIEau, dans la première exécution, l'interprète dans le tralala est le un en cours d'exécution, tandis que dans la seconde c'est celui mentionné sur la ligne de commande. Jusqu'ici tout va bien.
Mais maintenant, si je change le « interprète » sur le tralala à quelque chose comme /usr/bin/wc
, il bat toujours tout interprète perl
je mentionne sur la ligne de commande:
% cat demo-wc
#!/usr/bin/wc
printf "$]\n";
% ./demo-wc # produces the expected behavior
4 3 31 ./demo-wc
% /usr/local/bin/perl-5.22 ./demo-wc
4 3 31 ./demo-wc
% /usr/local/bin/perl-5.14 ./demo-wc
4 3 31 ./demo-wc
AFAICT, ce comportement spécial semble être limité perl
interprètes; non perl
interprètes, tels que /bin/bash
, ne « passer outre » le tralala:
% /bin/bash ./demo-wc
$]
L'essentiel est que perl
semble avoir radicalement différentes politiques de gestion du tralala en fonction de l'interprète mentionné.
- Comment
perl
déterminer la politique à suivre? - Quelles sont exactement les politiques dans les deux cas?
Déjà répondu ici: https://stackoverflow.com/a/29563961/152948 – hobbs
@hobbs Pas tout à fait, cela répond à une partie de la question. – zdim