sub _private_sub {
die "_private_sub is private!" unless caller eq __PACKAGE__;
# private stuff #
}
####
sub PROTECTED {
my $self = shift;
my @caller = caller(1);
$caller[3] =~ m{(.*)::(.*)$};
my ($pack, $sub) = ($1,$2);
local $Carp::CarpLevel += 1;
confess "method '$sub' is protected by '$pack'"
unless ($caller[0]->can($sub));
return $self;
}
####
use base 'BaseClass';
# some stuff #
sub _protected_sub {
my $self = shift->PROTECTED;
print "This is a protected sub!";
}
####
method 'test2' is protected by 'LocalTest' at LocalTest.pm line 12
LocalTest::test2('LocalTest2=HASH(0x18633a4)') called at test.pl line 15
main::test() called at test.pl line 20