package Foo; use Class::Std; sub foo { print "$_[0]\->Foo::foo()\n" } package Bar; use Class::Std; sub AUTOMETHOD { return sub { print "$_[0]\->Bar::foo()\n" } if m/\A foo \Z/xms; return; } package Baz; use base qw( Bar ); package Qux; package main; if ($meth_ref = Foo->can('foo')) { Foo->$meth_ref(); } if ($meth_ref = Bar->can('foo')) { Bar->$meth_ref(); } if ($meth_ref = Qux->can('foo')) { Qux->$meth_ref(); }