#/usr/bin/perl use strict; use warnings; sub trace { my @lst; my $deep=2; while(my ($package, $filename, $line, $subroutine)=caller($deep++)) { push @lst, "at $filename, Line $line (Package:$package, Sub:$subroutine)\n"; } print STDERR "\n\n",reverse(@lst); print @_ if(@_); } $SIG{__DIE__} = sub{ trace() }; $SIG{__WARN__} = sub{ trace(@_) }; a(); ######################################################################## sub a{ b() } sub b{ c() } sub c{ IN::d() } package IN; sub d{ e() } sub e { warn("UPS"); f(); } sub f{ IN::IN::g() } package IN::IN; sub g{ h() } sub h{ die("BOOM") }