web-dev-qa-db-fra.com

Comment terminer un programme en Perl - quitter ou mourir?

J'utilise la vérification de la syntaxe pour voir si mon script Perl est utilisé correctement. Si la syntaxe n'est pas correcte, j'affiche un message disant quelle est la syntaxe correcte, puis je termine l'exécution du programme.

Entre:

print "Please use the following syntax: ...";
exit 1;

et:

die("Please use the following syntax: ...");

Lequel devrais-je utiliser? Je sais que die aurait été la réponse si la gestion des exceptions était en place, mais ce n'est pas le cas.

Lequel est le meilleur choix pour la fin du programme sans gestion des exceptions? Veuillez également expliquer pourquoi.

31
Lazer

Cela dépend de ce que vous voulez voir se produire avec STDERR et STDOUT. Je préfère envoyer des messages d'erreur et d'avertissement à STDERR afin que lorsque quelqu'un essaie de rediriger la sortie vers un fichier, il voit toujours les messages d'erreur; Cependant, il y a des moments où STDOUT est utilisé pour communiquer l'état à l'utilisateur afin qu'il ou elle puisse tail -f ou paginez-le, et à ces moments-là, écrire à STDERR leur cause de la peine (ils doivent rediriger STDERR vers STDOUT avec 2>&1, et tout le monde ne sait pas comment faire). Donc, lequel utiliser, die ou print et exit, dépend fortement du type de programme que vous écrivez.

Il y a d'autres avantages/inconvénients à utiliser die:

  • Vous pouvez intercepter die avec un eval, mais pas quitter
  • Vous pouvez exécuter du code lorsque le programme appelle die en installant un gestionnaire de signal pour le __DIE__ signal
  • Vous pouvez facilement remplacer la fonction die

Chacun d'entre eux a des moments où il est pratique de pouvoir les faire, et des moments où c'est pénible qu'ils puissent être faits.

35
Chas. Owens

print imprime dans STDOUT mais die imprime dans STDERR

exit 1 quitte avec un état de sortie de 1 mais die se termine avec la valeur actuelle de sortie de errno qui est $!

Par conséquent, die est la méthode préférée car elle est plus simple et plus courte.

22
codaddict

Il est préférable de suivre la pratique existante ("règle de la moindre surprise"): quitter avec 2 sur une erreur fatale telle qu'une erreur de syntaxe .

6
daxim