in reply to Re: Improving the Error Handling of my Scripts
in thread Improving the Error Handling of my Scripts
I think the die-message is available in $@ only in case the die happens within an eval{} block (in which case I personally wouldn't want to be mailed).
If the die happens outside of an eval, however (i.e. when the script atually dies), the message is only available in @_. (Also, I suppose your code should be mail($err), as the localized $@ would always be empty...)
In other words, I'd use something like
#!/usr/bin/perl use strict; use warnings; use Carp; $SIG{__DIE__} = sub { die @_ if $^S; # skip handler for eval{} blocks mail(@_); }; sub mail { chomp(my $msg = shift); print qq(mailing "$msg"...\n\n); } sub test { eval { croak "bar"; }; # doesn't send mail croak "foo"; # sends mail (and dies) } test(); __END__ $ ./827866.pl mailing "foo at ./827866.pl line 19 main::test() called at ./827866.pl line 22"... foo at ./827866.pl line 19 main::test() called at ./827866.pl line 22
|
---|