use warnings; use strict; use Scalar::Util qw/blessed/; @Error::ISA = qw//; # "base class" for errors @BadInput::ISA = qw/Error/; sub doit { my $in = shift; if ( $in =~ /foo/ ) { return bless [123,456], 'RealReturnValue'; } else { return bless ['abc','def'], 'BadInput'; } } for my $val ("foobar", "quzbaz") { my $ret = doit($val); if ( my $err = blessed $ret and $ret->isa('Error') ) { print "$val -> Error: $err\n"; } else { print "$val -> OK\n"; } } __END__ foobar -> OK quzbaz -> Error: BadInput