Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 将数组中的值取消引用到一行中声明的变量_Perl_Reference_Dereference - Fatal编程技术网

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

Perl 将数组中的值取消引用到一行中声明的变量,perl,reference,dereference,Perl,Reference,Dereference,要从函数调用中检索参数,我通常会这样做 use strict; use warnings; foo([1,2],[3,4]); sub foo{ my ($x, $y) = @_; ... } 在本例中,$x和$y现在分别是对数组的引用。如果我想轻松地使用这些数组中的变量,我首先要取消引用它们 ... my ($x1, $x2) = @{$x}[0,1]; # ...same for $y 我想知道是否有一种方法可以取消对@(或者实际上是任何其他数组)中的参数的引用并将它

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

use strict;
use warnings;

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

sub foo{
    my ($x, $y) = @_;
    ...
}
在本例中,$x和$y现在分别是对数组的引用。如果我想轻松地使用这些数组中的变量,我首先要取消引用它们

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

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

我没有完全得到您想要的,但是这样可以吗:

foo([1,2],[3,4]);
sub foo{
    my ($x1,$x2) = @{$_[0]}[0,1];
    say "x1=$x1 , x2=$x2";
}
输出:

x1=1 , x2=2
map
采用
@
并使用
@$
操作将其每个元素解引用到一个数组中


也可以使用的
deref
d
函数来实现相同的目标。

这就是为什么我要
展开

sub unroll (@) { 
    return map { ref() eq 'ARRAY' ? @$_ : ref() eq 'HASH' ? %$_ : $_ } @_;
}
所以我可以这样说:

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

比以前漂亮多了

map { @$_ } @_[0, 1]

诸如此类。另外,它更健壮一些

这不是OP要问的。他想在一行中提取
($x1,$x2,$y1,$y2)
,我想我可以通过使用
my($x1,$x2,$y1,$y2)=({$[0]}[0,1],{$[1]}[0,1])来提取它们。因此,我可能只是想知道是否有一种快速的方法来展平数组:“
@{[…]}
,在某些地方使用
@[0,1]
和在其他地方使用
@
有什么关系。错误的二分法!至于稳健性,
map@$\,@
适用于所有数组,而
unroll
不适用。此外,
map@$\u,@
unroll
检测到更多的错误输入。
my ($x1, $y1, $x2, $y2) = &unroll;
map { @$_ } @_[0, 1]