use lib '.'; use Error qw(:try); use strict; use warnings; @Error::Bad::ISA = qw(Error); $Error::Debug = 1; # turn on verbose stacktrace sub abc { try { try { throw Error::Simple("a simple error"); } catch Error::Simple with { my $err = shift; throw Error::Bad(-text => "some text"); } except { return { 'Error::Simple' => sub { warn "simple" } } } otherwise { 1; } finally { warn "finally\n"; }; } catch Error::Bad with { 1; }; } sub def { unlink("not such file") or record Error::Simple("unlink: $!", $!) and return; 1; } abc(); my $x = prior Error; print "--\n",$x->stacktrace; unless(defined def()) { my $x = prior Error 'main'; print "--\n",0+$x,"\n",$x; # 0+$x converts to Integer via "value" method }