クラスにメソッドがはえているかどうかを確認するためには、
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 $