local $SIG{__DIE__} = sub { open my $fh, '>>', 'log.err' or warn "Can't append to 'log.err': $!" and return; print $fh @_, "\n\$\@: |$@|"; }; eval { die "fubar!"; }; # <--- update, semicolon was missing 1 / 0; __END__ Illegal division by zero at foo.pl line 8. #### @_: |fubar! at foo.pl line 7. | $@: || @_: |Illegal division by zero at foo.pl line 8. | $@: |fubar! at foo.pl line 7. | #### return if $^S; # we are within an eval block