Que dois-je utiliser pour la ligne de shebang d’un script Perl?

Lequel de ceux-ci est meilleur ou plus rapide à utiliser comme ligne de shebang pour un script Perl?

#! perl #! perl.exe #! fullpath/perl(/perl.exe) #! partialpath/perl(/perl.exe) 

Et, en utilisant #!perl , quand ça marche sur un système particulier, comment puis-je trouver dans le script quel interpréteur perl j’utilise pour pouvoir le mettre dans la ligne shebang?


Et, si vous utilisez un /path/path/perl , * ou ... autorisés pour les dossiers?

Si vous devez coder en dur #, utilisez #!/usr/bin/env perl . Pourquoi? Ce que vous voulez, c’est que le programme Perl fonctionne avec Perl préféré de l’utilisateur. Ce sera la première dans leur PATH . #!perl ne fait pas ce que je veux dire, il ne recherche pas le PATH de l’utilisateur, #!/usr/bin/env perl est ce que vous en faites. /usr/bin/env sera toujours présent sur les systèmes Unix.

Si l’utilisateur utilise Windows, comme d’autres l’ont fait remarquer, cela n’a pas d’importance. Windows n’utilise pas #! il utilise des associations d’extension de fichier. Assurez-vous que votre programme s’appelle foo.pl ou quelque chose et que cela fonctionnera. Mais incluez le #! ligne quand même car certains utilitaires et éditeurs l’utilisent.

Si vous envoyez le code, laissez l’installateur s’en charger. MakeMaker/Makefile.PL et Module::Build/Build.PL vont tous deux changer votre #! line pour correspondre à la perl utilisée par l’utilisateur pour l’installation. Ils s’occuperont de ce problème pour vous.

Si vous installez du code pour votre propre utilisation de production, vous devez utiliser le chemin d’access complet à une copie particulière de perl. Quelle copie de perl? Une spécifique à votre projet. Est-ce que cela signifie que vous devez comstackr perl pour chaque projet? Non, vous pouvez créer un lien symbolique. Project foo peut avoir le point /usr/local/bin/fooperl sur /usr/bin/perl5.18 . Utilisez #!/usr/local/bin/fooperl . Maintenant, si vous décidez de mettre à jour perl, vous pouvez le faire par projet en modifiant le lien symbolique.

Un Windows perl.exe -bang (déduit du bit perl.exe ) ne semble pas pertinent puisque votre (shell) “shell” ne l’parsing probablement même pas (corrigez-moi si je me trompe, aurait pu être modifié récemment).

Certains indicateurs de ligne de commande peuvent toujours être détectés par Perl lui-même ( selon ce fil ).

  1. Comme l’a noté ChristopheD, je peux confirmer par la pratique (ActivePerl sur XP) que la ligne shebang n’est pas vraiment nécessaire sous Windows.

    Une ligne de shebang indique à un shell Unix à quel interprète transmettre le script.

    Sous Windows, le programme auquel transmettre le script sera déterminé par les associations basées sur l’extension.

  2. Sur Unix, la troisième option (chemin complet vers l’exécutable perl ) est la meilleure.

    Et oui, vous pouvez utiliser “..” en théorie (le shell ne se soucie pas) mais vous ne devez pas vraiment utiliser le chemin relatif – vous ne saurez jamais quel sera le répertoire de travail actuel lors de l’exécution d’un script.

Si vous utilisez CGI via Apache sous Windows, le SHEBANG EST UTILISÉ. Vous aurez besoin du chemin complet pour perl.

Si vous développez sous Unix en utilisant Perl et que vous utilisez “perlbrew” pour basculer facilement entre les différentes versions de Perl, la ligne “! # / Usr / bin / env perl” fonctionne bien.

La première ligne représente shebang. Il raconte essentiellement le programme où est situé l’interpréteur Perl, puisque Perl est un langage interprété. Sous Linux, vous pouvez taper dans le terminal:

 whereis perl 

qui vous donnera l’emplacement exact de celui-ci. Habituellement, c’est à l’intérieur de / usr / bin / perl . Cela signifie que vous voulez faire Shebang concernant / usr / bin / perl

 #! /usr/bin/perl use ssortingct; use warnings; use v5.10.1; . . . 

Ceci est juste une bonne pratique, donc c’est évidemment la solution la plus rapide.

J’espère que vous trouvez ça utile,

Merci.

Et, quand on utilise “#! Perl”, quand il fonctionne sur un système particulier, quel est le print () pour afficher le chemin complet de perl.exe, qui pourrait être inclus dans la ligne Shebang?

Eh bien, si vous utilisez l’instruction print, vous exécutez déjà du code Perl, donc …

C’est l’une des choses que je n’aime pas chez Perl .

Sous Windows, si vous utilisez au moins ActiveState Perl, si le fichier se termine par .pl, le registre Windows exécutera l’interpréteur Perl pour vous, quelle que soit la ligne shebang. Sur Cygwin, je ne sais pas trop pourquoi mais #! perl #! perl fonctionne aussi. Sous Unix, vous devez placer le chemin complet de votre exécutable Perl dans la ligne shebang. L’idée de Schwern d’utiliser env est pratique, mais présente un certain danger, comme je l’ai souligné dans un commentaire.

C’est pourquoi je vous suggère que la meilleure solution consiste à empaqueter vos scripts Perl en tant que modules CPAN . Les programmes d’installation CPAN tels que Module :: Build changeront alors la ligne shebang en chemin complet vers votre interpréteur Perl. (Je ne suis pas sûr que l’installateur de Schwern, ExtUtils :: MakeMaker, le fasse ou utilise env , puisque je ne l’utilise pas.)