Thread Exceptions
(18 answers)
Opened by roooot at 2010-03-21 13:46
Je länger ich suche, desto mehr Gründe finde ich, Error nicht zu benutzen (Memory Leak, Unvorhersebarkeit best. Abläufe, ..).
Es muss doch etwas geben, das Exception Handling unter Perl verwirklicht und dabei nicht eval benutzt und die Exception Behandlung über ifs löst. Ich habe mir bisher Error, Exception::Class, Try::Tiny und TryCatch angeschaut. Exception::Class gefällt mir der Syntax nicht wirklich: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # try eval { MyException->throw( error => 'I feel funny.' ) }; my $e; # catch if ( $e = Exception::Class->caught('MyException') ) { warn $e->error, "\n", $e->trace->as_string, "\n"; warn join ' ', $e->euid, $e->egid, $e->uid, $e->gid, $e->pid, $e->time; exit; } elsif ( $e = Exception::Class->caught('ExceptionWithFields') ) { $e->quixotic ? do_something_wacky() : do_something_sane(); } else { $e = Exception::Class->caught(); ref $e ? $e->rethrow : die $e; } Code (perl): (dl
)
1 2 3 4 5 eval { Exception::Class::Base->throw('error') }; if ( catch my $err ) { $err->isa('this') and do { handle_this($err) }; $err->isa('that') and do { handle_that($err) }; } Try::Tiny bietet nicht die Unterscheidung verschiedener Exceptions, sondern springt in den catch Block sobald der try stirbt. TryCatch reagiert auf den "die" Befehl. Ich habe allerdings nicht herausgefunden, wie man hier verschiedene "Exceptions" werfen kann. Sprich er springt in den catch Block und untersucht dann wohl iwie die Rückmeldung, die mit dem "die" übergeben wurde mittels "where". Naja. Was verwendet ihr? Was könnt ihr empfehlen? Viele Grüße :)
|