sub foo { my ($self) = @_; croak "..." unless ref($self) && $self->isa("AnInterface") } #### use base qw(AnInterface AnotherInterface YetAnotherInterface); sub foo { my $self = shift; ... code ... }; #### sub foo # requires interfaces InterfaceA, InterfaceB { my ($self) = @_; InterfaceA::validate($self); InterfaceB::validate($self); }