use Scalar::Util qw( blessed ); sub is_or_extends { my ($type) = @_; croak "is_or_extends() expects a package name" if !defined($type) || ref($type) ne ''; return sub { return ( blessed($_[0]) ? $_[0]->isa($type) : UNIVERSAL::isa($_[0], $type) ); }; }