什么是shift-> somesub()在Perl中做什么?

时间:2011-12-13 17:55:30

标签: perl

我已经阅读了这段代码一段时间了,我无法弄明白。以下是做什么的?

sub shared  { shift->state(broadcast => @_) }

https://metacpan.org/source/GRAY/WebService-Google-Reader-0.21/lib/WebService/Google/Reader.pm#L72

1 个答案:

答案 0 :(得分:13)

在面向对象的Perl中,方法的 invocant (调用该方法的东西,无论是类的类还是类的实例)都作为第一个参数传递给子例程。 / p>

子程序的参数可在特殊数组@_中找到。 shift删除数组的第一个元素并返回它。如果您没有为shift指定明确的参数,则默认情况下它适用于@_

OO方法的通常模式是做

之类的东西
# foo method
sub foo { 
    my $self = shift;
    # do stuff to $self
    $self->othermethod;
}

这里发生的是他们只是使用快捷方式来避免创建变量$self,并且直接从state调用调用者的shift方法。所以你的方法相当于:

sub shared { 
    my $self = shift;
    $self->state( broadcast => @_ );
}