Halihallo Christian
http://search.cpan.org/~mouns/PException-2.4/PException.pm
benutzen, vielleicht kommt das deinen Bedürfnissen ja eher entgegen.
Auch ein guter Vorschlag, Danke!
Ich habe mich für folgende Lösung entschieden:
dem 'die' wird eine neue Error-Instanz übergeben. Diese Error
Instanz erbt von einer Basisklasse Exception, welche im stringified-
Kontext die Fehlerbeschreibung ausgibt. Falls also 'die' nicht über
eval oder __DIE__ Signal abgefangen wird, wird einfach der Fehler
ausgegeben. Falls er abgefangen wird, kann man über ein Exception-
Handling auf die Exception-Instanz zugreifen (welche z.B. in
Anlehung an Java auch ein StackTrace implementiert).
So habe ich
a) einen ganz normalen 'die', falls nicht abgefangen.
Über '""' overloading erreiche ich eine ganz normale, stringified
Fehlermeldung, die von CORE::die ausgegeben wird, falls abgefangen
kann auf die Instanz zugegriffen werden.
b) eine einfache Möglichkeit Fehler über __DIE__ Signal auszuwerten
und darauf zu reagieren
c) kein Laden von PException oder was auch immer in jeder Klasse.
Folgendes kleines Beispiel zur demonstation meiner momentanen Lösung:
------------------------------------
#!/usr/bin/perl
package Exception;
use overload '""' => &to_string;
use strict;
use warnings;
sub new {
my ($class,$code,$stringified) = @_;
bless {code=>$code,str=>$stringified}, $class;
}
sub to_string($) {
my ($self) = @_;
return "$self->{code} - $self->{str}\n";
}
package main;
use strict;
use warnings;
use base qw(Exception);
die new Exception('ERR_DATABASE_CONNECTION_REFUSED', 'Verbindungsaufbau zur Datenbank fehlgeschlagen!');
or
local $SIG{__DIE__} = sub {
my ($exception) = @_;
# do something with object $exception
print $exception->{code};
exit(255);
};
die new Exception('ERR_INVALID_CHARACTER', 'Ungültiges Zeichen!');
----------------------------------
Viele Grüsse
Philipp