Code
$VAR1 = [ '/root/Lib/', '/etc/perl', '/usr/local/lib/perl/5.10.0', '/usr/local/share/perl/5.10.0', '/usr/lib/perl5', '/usr/share/perl5', '/usr/lib/perl/5.10', '/usr/share/perl/5.10', '/usr/local/lib/site_perl', '.', '/root/Lib/' ];
3 Réponses :
Vous devriez voir http: // perdoc. perl.org/lib.html p> p> utiliser lib code> à la place. De cette façon, l'exécution est cohérente.
Il y a deux questions qui rôdent ici. La question de titre est "Quelle est la différence entre Une réponse, pas nécessairement applicable à votre situation, est que Travailler avec Perl 5.12.4 (aïe, c'est vieux) de ./ test.pl code> et
perl test.pl code>?", Alors que la question secondaire est « Pourquoi
/ root / Lib code> ajouté à l'avant de
@INC code> lorsque le script est exécuté comme
./ test.pl code> et non lorsqu'il est exécuté comme
perl test.pl ? "
./ test.pl code> exécute l'interpréteur Perl spécifié par le tralala (
/ usr / bin / perl code>), alors que
perl test.pl code> fonctionne tout interpréteur Perl est trouvé en premier sur votre
$ PATH code> (ou alias ou fonctions). Ceux-ci doivent ne pas être la même version de Perl. Pour moi, ils sont très rarement la même version de Perl; l'un dans
/ usr / bin code> est généralement relativement ancien et celui sur mon
$ PATH code> est relativement nouveau (5.8.x vs 5.18.x, par exemple). p>
/ usr / bin code> sur ma machine, et en utilisant votre script, je vois: p>
$ perl test.pl
$VAR1 = [
'/root/Lib/',
'/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.4',
'/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',
'.'
];
$ ./test.pl
$VAR1 = [
'/root/Lib/',
'/root/Lib/',
'/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.4',
'/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',
'.'
];
$
Lorsque vous l'exécutez comme donc ce qui suit ajoute des avertissements p> si vous l'exécutez comme dans votre cas, cela signifie que La raison pour laquelle il apparaît au début de la liste; Est-ce que lorsque Perl est en fait appelé avec cette option, il l'ajoute avant d'avoir une chance de charger ' perl test.pl code>, parmi les premières choses qu'il est sur le point de voir s'il existe une ligne commençant par
#! code>. S'il en trouve un, il essaie d'agir comme s'il était appelé avec ces arguments.
./ test.pl code> Votre système l'exécute réellement avec ces arguments. Perl n'a vraiment pas de façon de savoir que cela s'appelait implicitement comme ça. Donc, Perl analyse juste que la ligne elle-même comme elle était auparavant. P>
/ root / lib /
@inc code> deux fois. p>
@inc code>
avec quoi que ce soit.
Si elle est ajoutée lors de l'analyse #! Code>, il a déjà peuplé
@Inc code>
afin qu'il ajoute à la fin. P> p>
+1 qui est surprenant comportement, enquête ...
Si vous avez fait Perl -i / root / Root / Lib Test.pl Ce serait le même. Le shebang sur la ligne Une est utilisé comme commande quand vous le faites ./test.pl
Curieux et curieux: si
l code> est
/ root / lib code> i obtenir la sortie de
l, l, ... code> pour l'exécution de Shebang et
L, ... code> pour l'invocation / usr / bin / perl. Quel système d'exploitation et (le cas échéant) PERL PERL utilisez-vous?
De plus, les valeurs (le cas échéant) les variables d'environnement de Perl5Lib et de Perllib sont pertinentes.
Avez-vous plusieurs installations Perl?
Voir aussi Quelle est la différence entre "
Perl Test.pl code> "et"
. Pas identique, mais étroitement lié../ test.pl code> "