Try to put this into your class A:
use Class::ISA;
sub method_class {
my ($self, $method_name) = @_;
my $coderef;
my $class;
foreach (Class::ISA::self_and_super_path(ref($self)||$self)) {
my $coderef_cur = $_->can($method_name);
last unless defined $coderef_cur;
last if defined $coderef and $coderef ne $coderef_cur;
$coderef = $coderef_cur;
$class = $_;
}
return $class;
}
...it is not very tested, and I am not sure about autoloading, but I suppose this is what you seek. BUT, remember Merlyn's words, class would never care about method actually launched.
Update: I did not tested multiple inheritance.