多行弹出一行

Nat*_*enn 2 arrays syntax perl arguments

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

my ($self, $loop, $resources) = @{pop @_};
Run Code Online (Sandbox Code Playgroud)

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

PSI*_*Alt 10

在这个例子中@_是一个数组,并且最后一个元素预计为一个数组引用.

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

这可以像这样重写:

my $self = $_[-1]->[0];
my $loop = $_[-1]->[1];
my $resources = $_[-1]->[2];
Run Code Online (Sandbox Code Playgroud)

或者像这样:

my $temp = pop @_;
my ($self, $loop, $resources) = @$temp;
Run Code Online (Sandbox Code Playgroud)

所以,实际上它不是"一行中的多个流行音乐"