Hallo Philipp,
noch nichts von SIG__DIE__ gehört? :) Ich persönlich arbeite viel so:
$SIG{__DIE__} = &fatal;
open DAT,"blahr" or die "open blahr: $!\n";
close DAT;
sub fatal {
my $err = shift;
# tu was
exit;
}
Du kannst auch gern eine Objekts-Instanz oder so übergeben:
$SIG{__DIE__} = &fatal;
open DAT,"blahr" or die new ErrorClass("errortext");
close DAT;
sub fatal {
my $err = shift;
print $err->toString;
exit;
}
package ErrorClass;
sub new {
my ($class,$err) = @_;
return bless {err => $err},ref($class)||$class;
}
sub toString {
return shift->{err};
}
Geht eigentlich recht angenehm und braucht nicht diese ekeligen
eval-Konstrukte. Du kannst $SIG{__DIE__} sogar lokal überschreiben:
{
local $SIG{__DIE__} = 'IGNORE';
# ...
}
Ich hoffe, das hilft. Vorsicht aber: auch in eval()-Blöcken wird
der Callback von die() ausgeführt! Als ggf. überschreiben per local.
Grüße,
CK
Q: God, root, what's the difference?
A: God is merciful.