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!" }
foo();
__output__
in bar
badness! at - line 8
main::bar() called at - line 7
main::foo() called at - line 10
####
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.
##
##
{
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.