Perl-users.jp

->can は coderef をかえす

クラスにメソッドがはえているかどうかを確認するためには、

Foo->can('bar')

という風に、can メソッドをつかいます。can メソッドの return value は、boolean だと おもわれがちですが、実際にはちがいます。->can の return value は Foo->bar メソッドの coderef です。

よって、

Foo->can('bar')->('baz');

Foo::bar('baz')

と同じ意味になります。

応用編

local と can をくみあわせると、スコープの中でだけ豚を飛ばす、などといった芸当が可能になります。

my $pig = Pig->new;
{
    local *Pig::fly = Bird->can('fly');
    $pig->fly; # $pig can fly now
}

目次へ

Last modified: $Date: 2008-05-22T09:21:23.154313Z $