多行弹出一行

时间:2012-11-26 20:51:20

标签: arrays perl syntax arguments

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

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

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

1 个答案:

答案 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;

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