my $res = eval { something(...); }; die $@ if $@; do_something_more(...); #### use Carp; $SIG{__DIE__} = \&Carp::confess; my $res = foo(); print "ok\n"; sub foo { local $SIG{__DIE__}; die "BANG!"; } __END__ BANG! at - line 8. #### 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