use strict; use warnings; use Data::Dumper; use Error; { package Error::MyError; @Error::MyError::ISA = qw(Error::Simple); sub catch { my $class = shift; return undef unless $@; return 1 if $@->isa($class); return 0; } } @Error::NextLevel::ISA = qw(Error::MyError); eval { throw Error::NextLevel("TEST"); 0; }; if (catch Error::NextLevel ) { print "Caught: " . $@->text; };