Comment mettre fin à un programme en Perl - sortie ou mourir?
Je suis en utilisant la syntaxe de la vérification pour voir si mon script Perl est utilisé de la bonne façon. Si la syntaxe n'est pas correcte, j'affiche un message disant que la syntaxe correcte est, et puis à la fin de l'exécution du programme.
Entre:
print "Please use the following syntax: ...";
exit 1;
et:
die("Please use the following syntax: ...");
Qui dois-je utiliser? Je sais die
aurait été la réponse si la gestion des exceptions est en place, mais ce n'est pas le cas.
Lequel est le meilleur choix pour la fin du programme, sans exception, de la manipulation? Veuillez également vous dire pourquoi.
- Il est intéressant de noter que
die
ajoute automatiquement le nom de fichier et le numéro de ligne, à moins que l'erreur de la chaîne se termine par un saut de ligne"\n"
.
Vous devez vous connecter pour publier un commentaire.
Cela dépend de ce que vous souhaitez voir se produire avec STDERR et STDOUT. Je préfère envoyer d'erreur et d'avertissement type de messages sur la sortie STDERR, de sorte que lorsque quelqu'un tente de rediriger la sortie vers un fichier, ils ont encore voir les messages d'erreur; Cependant, il ya des moments que lors de la sortie standard (STDOUT) est utilisé pour communiquer l'état de l'utilisateur afin qu'il ou elle peut
tail -f
ou paginer, et à l'époque de l'écriture sur la sortie STDERR causes de la douleur (ils ont pour rediriger STDERR retour dans STDOUT avec2>&1
, et pas tout le monde sait comment le faire). Donc pour l'utiliser,die
ouprint
etexit
, dépend fortement du type de programme que vous écrivez.Il y a d'autres avantages/inconvénients à l'utilisation de
die
:die
avec uneval
, mais pas de sortiedie
par l'installation d'un gestionnaire de signal pour la__DIE__
signaldie
fonctionChacun de ceux-ci a des moments où il est à portée de main pour être en mesure de les faire, et des fois quand c'est une douleur qu'ils peuvent faire.
warn
le message d'erreur et ensuite utiliserexit
? Envisagez-vous de qu'obtenir le meilleur des deux?warn
écrit sur la sortie STDERR ainsi je ne vois pas comment cela pourrait être mieux que deprint
etexit
dans le scénario que j'ai décrit. Il est important de rappeler qu'il n'existe pas de "meilleur", il y a seulement des comportements qui peuvent être bénéfiques ou nuisibles dans certaines circonstances. En général, la bonne réponse est àdie
puisque cela permet une plus grande souplesse dans le programme, mais vous devez garder à l'esprit la façon dont l'utilisateur du programme sera la consommation de la sortie.print
imprime àSTDOUT
maisdie
imprime àSTDERR
exit 1
ferme avec la sortie de statut de1
maisdie
sorties avec sortie valeur actuelle deerrno
qui est$!
Donc
die
est la meilleure façon que sa simple et plus court.$? >> 8
si$!
est0
. ou 255 si$? >> 8
est de 0.$!
est une variable spéciale qui expose le C valeur de errno.$?
une variable spéciale qui contient des informations sur le dernier programme exécuté parsystem
, backticks, etc. Voir perldoc.perl.org/perlvar.html#%24ERRNO et perldoc.perl.org/perlvar.html#%24CHILD_ERROR pour plus d'informations.Il est préférable de suivre la pratique existante ("la règle de moindre surprise"): sortie à 2 sur une erreur fatale comme une erreur de syntaxe.