in reply to Perl OO Disinheritence

This is one of those catches about Perl's OO behavior: since there are no "private" methods, there's no way for class A to hide a3() aside from the tricks in Damian's book. Of course, if the "A" class never meant for a3 to be private, it wouldn't have helped anyway.

Others have shown the best way to prevent the UNIVERSAL::can method from showing a3 to the outside world. But you'll also want to override it, probably with a null method (or an outright die if you want to be proactive about it):

sub B::a3 { return; }

--rjray