tokuhirom's Blog

Perl5 における ":method" とはなにか

attributes.pod によると以下のように説明されている。

method   Indicates that the referenced subroutine is a method. A subroutine so marked will not trigger the "Ambiguous call resolved as CORE::%s" warning.

:method というアトリビュートは、その関数がメソッドであることを示します。 このマークがついているサブルーチンは、"Ambiguous call resolved as CORE::%s" という警告をはっしません。

具体的には

use strict; use warnings;
package Foo
sub shift { }
sub f { shift->{hoge} }

は警告をだしますが

use strict; use warnings;
package Foo
sub shift :method { }
sub f { shift->{hoge} }

は警告をだしません。

よって、組み込み関数とおなじ名前をメソッドとして再定義したときに警告を抑制する用途につかえるようです。 (できることならば別の名前をつけたほうが望ましいことはいうまでもありません)