Вы можете создать в своем дочернем классе фиктивные методы, которые перехватывают вызовы методов и умирают.
package My::Foo;
our @ISA = 'My::Bar';
use Carp ();
for my $method qw(dostuff ...) {
no strict 'refs';
*$method = sub {Carp::croak "no method '$method' on '$_[0]'"};
}
Вы могли бы даже написать модуль для этого:
package No::Method;
use Carp ();
sub import {
my $class = shift;
my $caller = caller;
for my $method (@_) {
no strict 'refs';
*{"$caller\::$method"} = sub {
Carp::croak "no method '$method' on '$_[0]'"
};
}
}
А затем использовать его:
package My::Foo;
our @ISA = 'My::Bar';
use No::Method qw(dostuff);