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 del, l, ... code> pour l'exécution de Shebang etL, ... 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> "