sub _my_protected_method { ((caller)[0]->isa(__PACKAGE__)) || die "This method can only be called by a subclass"; # ... do something }