我找到了一行Perl代码,它以我以前从未见过的方式使用pop
。我一直认为pop
只返回数组中的一个项目,但以下用法的方式不同:
my ($self, $loop, $resources) = @{pop @_};
程序员似乎正在使用一行代码和一个pop
命令从参数数组中获取三个项目,而不创建显式的for
循环。这究竟是如何工作的?
答案 0 :(得分:10)
在此示例中, @_ 是一个数组,最后一个元素应该是一个arrayref。
因此,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;
所以,实际上它不是“一行多重弹出”