demo_can.pl   [plain text]


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();
}