use Carp qw(confess cluck); BEGIN { *CORE::GLOBAL::warn = \&cluck; *CORE::GLOBAL::die = \&confess; } sub foo { bar() } sub bar { print "in bar\n"; die "badness!" } eval { foo }; print "ack - $@" if $@; __output__ in bar ack - badness! at - line 8 main::bar() called at - line 7 main::foo() called at - line 10 eval {...} called at - line 10 #### use Carp qw(confess cluck); BEGIN { *CORE::GLOBAL::warn = \&cluck; *CORE::GLOBAL::die = \&confess; } sub foo { bar() } sub bar { print "in bar\n";die( bless{akey=>"a string"} ) } use DDS; eval { foo }; print "ack: ", Dump($@) if ref $@; __output__ in bar ack: $main1 = bless( { akey => 'a string' }, 'main' );