56 votes

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

Laquelle de ces méthodes est la meilleure ou la plus rapide à utiliser comme ligne shebang pour un script Perl?

 #! perl

#! perl.exe

#! fullpath/perl(/perl.exe)

#! partialpath/perl(/perl.exe)
 

Et, quand on utilise #!perl , quand cela fonctionne sur un système particulier, comment puis-je savoir dans le script quel interprète Perl j'utilise pour pouvoir le mettre dans la ligne shebang?


Et, si vous utilisez un / chemin / chemin / perl, "*" ou "..." est-il autorisé à être utilisé pour les dossiers?

75voto

Schwern Points 33677

Si vous devez coder en dur #!, utiliser #!/usr/bin/env perl. Pourquoi? Ce que vous voulez est pour le programme Perl afin de fonctionner avec les préférés des utilisateurs de Perl. Qui va être le premier dans leur PATH. #!perl ne pas faire ce que je veux dire, il n'est pas rechercher le CHEMIN d'accès de l'utilisateur, #!/usr/bin/env perl , c'est comment vous l'enlever. /usr/bin/env sera toujours là sur les systèmes Unix.

Si l'utilisateur est à l'aide de Windows, comme d'autres l'ont souligné, il n'a pas d'importance. Windows n'utilise pas #! il utilise l'extension de fichier des associations. Assurez-vous que votre programme est appelé, foo.pl ou quelque chose et ça marchera. Mais inclure le #! la ligne de toute façon que certains services publics et les éditeurs à en faire usage.

Si vous êtes à la code de la navigation, laisser le programme d'installation à prendre soin d'elle. Les deux MakeMaker/Makefile.PL et Module::Build/Build.PL va changer votre #! ligne pour correspondre à la perl l'utilisateur utilisé pour installer avec. Ils prendront soin de ce problème pour vous.

Si vous installez le code pour votre propre utilisation en production, vous devez utiliser le chemin d'accès complet à un exemplaire de perl. L'exemplaire de perl? L'un spécifique à votre projet. Est-ce à dire que vous devez compiler perl pour chaque projet? Non, vous pouvez faire un lien symbolique. Projet foo pourrait avoir /usr/local/bin/fooperl point de /usr/bin/perl5.18. Utiliser #!/usr/local/bin/fooperl. Maintenant, si vous décidez de mettre à jour de perl, vous pouvez le faire par projet en changeant le lien symbolique.

8voto

ChristopheD Points 38217

Une fenêtre Windows (déduite du perl.exe bit) ne semble pas être pertinente puisque votre (ahum) 'shell' ne l’analyse probablement même pas (corrigez-moi si je me trompe, cela aurait pu être changé récemment).

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

8voto

user2509628 Points 36

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

6voto

DVK Points 63282
  1. Comme ChristopheD noté, je peux confirmer à partir de la pratique (ActivePerl sur XP) que la ligne shebang n'est pas vraiment nécessaire sur Windows.

    Une ligne shebang dit un shell Unix qui interprète pour passer le script.

    Sur Windows, le programme pour passer le script sera déterminé par les associations basée sur l'extension.

  2. Sur Unix, la troisième option (chemin d'accès complet à l' perl exécutable) est le meilleur.

    Et oui, vous pouvez utiliser ".." dans la théorie (shell s'en fout), mais vous ne devriez pas vraiment utiliser un chemin relatif - vous ne savez jamais ce que votre répertoire de travail en cours lors de l'exécution d'un script.

5voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X