将数组中的值从一行中取消引用到声明的变量

Mat*_*eck 7 perl reference dereference

要从函数调用中检索参数,我通常会这样做

use strict;
use warnings;

foo([1,2],[3,4]);

sub foo{
    my ($x, $y) = @_;
    ...
}
Run Code Online (Sandbox Code Playgroud)

在示例中,$ x和$ y现在分别引用了一个数组.如果我想轻易使用这些数组中的变量,我首先取消引用它们.

...
my ($x1, $x2) = @{$x}[0,1];
# ...same for $y
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以取消引用@_(或者,实际上是任何其他数组)中的参数,并将它们返回到一行中声明的变量列表中?

Zai*_*aid 8

foo ( [1,2], [3,4] );

sub foo {

    my ( $x1, $x2, $y1, $y2 ) = map @$_, @_;

    ...
}
Run Code Online (Sandbox Code Playgroud)

使用该操作map@_其每个元素取出和取消引用到数组中@$_.

人们还可以使用List::Genderef或者d功能来达到同样的目的.

  • 哦,那很美! (2认同)