my @array = @{$array_ref};
我不完全确定这个数组存储的是什么。任何人都可以向我解释发生了什么事吗?感谢。
答案 0 :(得分:1)
这只是取消引用数组引用。 $array_ref
包含对数组的引用,@array
设置为引用数组的内容。
$ perl -E 'my $a = [1, 2, 3]; my @b = @{$a}; say $a; say @b'
ARRAY(0x100803ea0) # a reference to an array
123 # actual array
答案 1 :(得分:1)
$array_ref
可能包含对数组的引用,该数组与数组本身不同。数组(名为@some_array
)包含元素(除非它是空的)。数组引用(名为$some_arrayref
)是一个标量值,用于引用实际数组。实际的数组可以是一个命名数组(如,它有一个变量名),或者可以是一个匿名数组(如,没有命名变量,但只能通过引用引用)。
要使用$array_ref
引用的数组中保存的元素,必须取消引用它。一种语法是@$array_ref
(读作“标量(@
)”所引用的名为$
的数组(array_ref
)。我从未成为粉丝在解除引用时将一堆符号(@
,$
和%
符号)干扰在一起。我觉得它妨碍了代码的可读性,特别是当引用变得更复杂或嵌套时。允许使用大括号,这有助于消除歧义并在视觉上澄清正在发生的事情。@{$array_ref}
可以被解读为@{....}
引用的数组($array_ref
)的解除引用。
从Perl的POD,看看perlreftut。这是一个很好的起点。
答案 2 :(得分:1)
代码生成$ array_ref引用的数组的顶级副本,并将其存储在@array中。
要制作深层复制,请使用Storable中的dclone:
use Storable;
@array = @{ dclone( $array_ref ) };
有关详细信息,请参阅perldoc Storable
。
Storable是与Perl一起安装的标准模块。要查看所有标准pargmatics和模块的列表,请参阅perldoc perlmodlib
。
答案 3 :(得分:0)
您需要阅读perlref。
简而言之,@array
与$array_ref
所指向的数组相同。这是我可以提供的最精确的答案,而不知道放入$array_ref
的内容。
答案 4 :(得分:0)
$array_ref
是对列表/数组的引用。
因此,为了在列表内容中取消引用它并获取所有内容,请使用
@{$array_ref}
并且可以将其分配到不同的数组/列表中,如:
my @array = @{$array_ref};