2

我发现了一行 Perl 代码,它pop以我从未见过的方式使用。我一直认为pop从数组中只返回一项,但以下用法有所不同:

my ($self, $loop, $resources) = @{pop @_};

似乎程序员正在使用一行代码和一个pop命令从参数数组中获取三个项目,而没有创建显式for循环。这究竟是如何工作的?

4

1 回答 1

10

在这个例子中,@ _是一个数组,最后一个元素应该是一个数组引用。

因此,从@_pop(@_)获取最后一个元素,然后将其取消引用到一个数组中;将前 3 个元素保存到 $self、$loop 和 $resources 中。

可以这样重写:

my $self = $_[-1]->[0];
my $loop = $_[-1]->[1];
my $resources = $_[-1]->[2];

或者像这样:

my $temp = pop @_;
my ($self, $loop, $resources) = @$temp;

所以,实际上它不是“一行中多次弹出”

于 2012-11-26T20:56:49.633 回答