sub foo { my ($self, $object_or_class) = @_; die $message unless does($object_or_class, @methods); ... } #### use Scalar::Util qw/blessed/; sub does { my ($proto, @methods) = @_; return if ref $proto && ! blessed $proto; my @coderefs; foreach my $method (@methods) { push @coderefs, $proto->can($method) || (); } return wantarray ? @coderefs : \@coderefs; }