{ package Expressive; use Carp qw(confess cluck); use subs qw( die warn ); *die = \&confess; *warn = \&cluck; sub test { warn "warning in ".__PACKAGE__."::test\n"; die "dieing in ".__PACKAGE__."::test\n"; } } print "using Expressive::\n"; eval { Expressive::test }; print $@; print "\nusing main::\n"; eval { warn "warning in ".__PACKAGE__; die "dieing in ".__PACKAGE__; }; print $@; print "\ndone.\n"; __output__ using Expressive:: warning in Expressive::test Expressive::test() called at pmsopw_379099.pl line 18 eval {...} called at pmsopw_379099.pl line 18 dieing in Expressive::test Expressive::test() called at pmsopw_379099.pl line 18 eval {...} called at pmsopw_379099.pl line 18 using main:: warning in main at pmsopw_379099.pl line 23. dieing in main at pmsopw_379099.pl line 24. done.