这个具体价值是什么? Perl的

时间:2011-04-27 07:29:23

标签: arrays perl

my @array = @{$array_ref};

我不完全确定这个数组存储的是什么。任何人都可以向我解释发生了什么事吗?感谢。

5 个答案:

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