Ma réponse est impopulaire, mais je ne pense pas que les programmeurs Perl devrait être d'essayer d'utiliser les extrêmement pauvres notion de la chose que nous appelons des "exceptions" en Perl. Il s'agit essentiellement d'un canal latéral de la valeur de retour. Cependant, tout en étant séduit par l'idée d'exceptions, même avec toutes les complexités de l'utilisation d'une variable globale pour le passer autour de l'état, les gens continuer à essayer de faire le travail.
En pratique, cependant, les gens utilisent des die
pour signaler l'échec. Certains diront que vous pouvez die
avec une référence et passer de nouveau objets d'erreur, mais vous n'avez pas besoin d' die
. Nous avons des objets, de sorte que nous devrions utiliser toute la puissance des objets:
sub some_sub {
...
return Result->new( error => 1, description => ... ) if $something_went_wrong;
return Result->new( error => 0, ... );
}
my $result = some_sub( ... );
if( $result->is_error ) { ... };
Qui n'implique pas de variables globales, l'action à distance, la portée des maux de tête, ou exigent des promotions. Vous créer une petite classe Result
, ou ce que vous voulez l'appeler, pour envelopper vos valeurs de retour de sorte que vous avez des données structurées au lieu de valeurs sans identité. Il n'y a pas plus à vous demander ce qu'est une valeur de retour signifie. C'est qu' undef
d'une valeur réelle ou une indication de l'échec? Est la valeur de retour de la bonne si elle est définie ou si c'est vrai? Votre objet peut vous dire ces choses. Et, vous pouvez utiliser le même objet die
. Si vous utilisez déjà l'objet avec die
et en l'utilisant comme valeur de retour, il y a très peu de recommander toutes les autres choses que vous avez à faire à tolérer $@
.
Je parle plus à ce sujet dans "Retour d'erreur objets au lieu de lancer des exceptions"
Cependant, je sais que vous ne pouvez pas aider à ce que les autres font, donc vous avez encore à faire semblant de Perl a des exceptions.