sub foo的语法是什么:method {shift-> bar(@_)}?

时间:2011-08-24 01:56:40

标签: perl

sub foo : method { shift->bar(@_) }

: method在这里意味着什么?

我从未用过这种方式......

1 个答案:

答案 0 :(得分:11)

: methodfunction 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(@_);
}