sub foo : method { shift->bar(@_) }
Run Code Online (Sandbox Code Playgroud)
: method这里的意思是什么 ?
我从来没用过这种方式......
Iva*_*uev 11
: method是功能属性描述.如此标记的子程序不会触发"不明确的调用解析为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
}
Run Code Online (Sandbox Code Playgroud)
更多细节:
: method - 表示引用的子例程是一种方法.如此标记的子程序不会触发"不明确的调用解析为CORE ::%s"警告.shift-获得第一个参数的@_,这将是$self ->bar(@_)- bar使用所有其他参数调用相同的类方法你可以这样读:
sub foo : method {
my ($self) = shift @_;
return $self->bar(@_);
}
Run Code Online (Sandbox Code Playgroud)