use Carp; $SIG{__DIE__} = \&Carp::confess; my $res = eval { foo() }; die $@ if $@; print "ok\n"; sub foo { local $SIG{__DIE__}; die "BANG!"; } __END__ BANG! at - line 9. at - line 4