Просто вызывающая сторона проверки:
package My;
sub new {
return bless { }, shift;
}
sub private_func {
my ($s, %args) = @_;
die "Error: Private method called"
unless (caller)[0]->isa( ref($s) );
warn "OK: Private method called by " . (caller)[0];
}
sub public_func {
my ($s, %args) = @_;
$s->private_func();
}
package main;
my $obj = My->new();
# This will succeed:
$obj->public_func( );
# This will fail:
$obj->private_func( );
Вы можете выделить текст в визуальном режиме, а затем выполнить над ним операцию gf, что в некоторой степени решит проблему.