local @stack; $SIG{__DIE__} = sub { die(@stack, @_); }; catcher(); sub catcher { local @stack = (@stack, "Caught 1!\n"); catcher2(); } sub catcher2 { local @stack = (@stack, "Caught 2!\n"); sub_that_dies(); } sub sub_that_dies { die "Foo"; } #### #=begin a require 'b'; print "Hello World\n"; #This die can also be replaced with print && exit $SIG{__DIE__} = sub { print "BOB!\n"; die(@_); }; a::a(); END{ print "Waka waka\n"; #=end a #=begin b package a; sub a{ die("A!"); } 1; #=end b __END__ Hello World BOB! A! at /tmp/b line 3. Waka waka