use Carp qw(confess cluck); BEGIN { *CORE::GLOBAL::warn = \&cluck; *CORE::GLOBAL::die = \&confess; } $SIG{__DIE__} = sub { print "I died: @_\n" }; $SIG{__WARN__} = sub { print "watch out: @_\n" }; sub foo { bar() } sub bar { print "in &bar\n"; warn "it's behind you!" } sub baz { qux() } sub qux { print "in &qux\n"; die "ack!" } eval { foo; baz; }; print "The End.\n"; __output__ in &bar watch out: it's behind you! at - line 12 main::bar() called at - line 11 main::foo() called at - line 17 eval {...} called at - line 17 in &qux I died: ack! at - line 15 main::qux() called at - line 14 main::baz() called at - line 17 eval {...} called at - line 17 The End.