Thread Exceptions (18 answers)
Opened by roooot at 2010-03-21 13:46

roooot
 2010-03-21 17:54
#135104 #135104
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
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 CPAN:Error, CPAN:Exception::Class, CPAN:Try::Tiny und CPAN: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;
  }
Man kann zwar CPAN:Exception::Class::TryCatch benutzen, aber dann wird das ganze auch nicht besser.
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 :)

View full thread Exceptions