->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