in reply to checking a method is not subclassed
If you just want to make sure that Baz::foo is being called from code you control you can just do:{ package Baz; sub new { my $class = shift; if ($class ne 'Baz') { if ($class->can('foo') != Baz->can('foo')) { die "Don't do that $class"; } } bless {}, $class; } sub foo { 'foo'; } sub boo { 'foo'; } } { package Foo; our @ISA = 'Baz'; sub foo { 'Foo'; } sub boo { 'Foo'; } } { package Boo; our @ISA = 'Foo'; sub boo { 'Boo'; } } { package Goo; our @ISA = 'Baz'; sub boo { 'Boo'; } } my ($a, $b, $c); eval { $a = new Baz; }; warn $@ if $@; eval { $c = new Foo; }; warn $@ if $@; eval { $b = new Boo; }; warn $@ if $@; eval { $b = new Goo; }; warn $@ if $@;
I can't think of anything that you could do in a BEGIN block that would help with this problem.$class->Baz::foo();
|
|---|