Comment gérer les erreurs capturés et non interceptées dans un sous-programme Perl?
-
22-08-2019 - |
Question
Ceci est un suivi à .
J'ai un sous-programme qui appelle une bibliothèque which-Crashes-Parfois, plusieurs fois. Plutôt que de canapé chaque appel dans ce sous-programme avec un eval {}, je viens de lui permettre de mourir, et utiliser un eval {} au niveau qui appelle mon sous-programme:
my $status=eval{function($param);};
unless($status){print $@; next;}; # print error and go to
# next file if function() fails
Cependant, il y a des conditions d'erreur que je peux et ne se coincent dans la fonction (). Quelle est la manière la plus appropriée / élégante pour concevoir l'accrocheur erreur dans le sous-programme et la routine d'appeler pour que je sois le bon comportement pour les erreurs et pris uncaught?
La solution
bloc eval peuvent être imbriqués:
sub function {
eval {
die "error that can be handled\n";
1;
} or do {
#propagate the error if it isn't the one we expect
die $@ unless $@ eq "error that can be handled\n";
#handle the error
};
die "uncaught error";
}
eval { function(); 1 } or do {
warn "caught error $@";
};
Autres conseils
Je ne suis pas tout à fait sûr de ce que vous voulez faire, mais je pense que vous pouvez le faire avec un gestionnaire.
$SIG{__DIE__} = sub { print $@ } ;
eval{ function($param); 1 } or next;