9
votes

différence entre ./test.pl et perl test.pl

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/'
        ];


6 commentaires

+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 est / root / lib i obtenir la sortie de l, l, ... pour l'exécution de Shebang et L, ... 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 "et" ./ test.pl ". Pas identique, mais étroitement lié.


3 Réponses :


2
votes

Vous devriez utiliser lib à la place. De cette façon, l'exécution est cohérente. xxx

voir http: // perdoc. perl.org/lib.html


0 commentaires

7
votes

Il y a deux questions qui rôdent ici. La question de titre est "Quelle est la différence entre ./ 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 ? "

Une réponse, pas nécessairement applicable à votre situation, est que ./ 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>

Travailler avec Perl 5.12.4 (aïe, c'est vieux) de / 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',
          '.'
        ];
$


0 commentaires

2
votes

Lorsque vous l'exécutez comme perl test.pl , parmi les premières choses qu'il est sur le point de voir s'il existe une ligne commençant par #! . S'il en trouve un, il essaie d'agir comme s'il était appelé avec ces arguments.

donc ce qui suit ajoute des avertissements xxx

si vous l'exécutez comme ./ test.pl 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.

dans votre cas, cela signifie que / root / lib / @inc deux fois.

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 ' @inc avec quoi que ce soit.
Si elle est ajoutée lors de l'analyse #! , il a déjà peuplé @Inc afin qu'il ajoute à la fin.


0 commentaires