sub foo : method { shift->bar(@_) }
: method
在这里意味着什么?
我从未用过这种方式......
答案 0 :(得分:11)
: method
是function attribute描述。如此标记的子程序不会触发“模糊调用解析为CORE ::%s”警告。
来自ysth的评论:
当sub与内置命令同名并且在没有&的情况下调用它时,会发出警告。而不是方法调用; perl使用内置而是发出警告。 :方法使警告静默,因为它清楚地表明sub无论如何都不打算被称为非方法。
<强>更新强>
此代码只在调用bar
时调用方法foo
:
sub foo : method { ## Mark function as method
shift->bar(@_) ## Pass all parameters to bar method of same object
}
更多详情:
: method
- 表示引用的子例程是一种方法。如此标记的子程序不会触发“不明确的调用解析为CORE ::%s”警告。shift
- 获取@_
的第一个参数,即$self
->bar(@_)
- 使用所有其他参数调用同一类方法bar
您可以将其读作:
sub foo : method {
my ($self) = shift @_;
return $self->bar(@_);
}