3

和有什么区别

myArr1 => \@existingarray

myArr2 => [
              @existingarray
          ]

我将 分配给@existingarray哈希图中的元素。

我的意思是内部到底发生了什么。是不是对于第一个,它指向同一个数组,而对于第二个数组,它创建一个新数组,其中的元素@existingarray

提前致谢

4

3 回答 3

8

是的,第一个引用,第二个复制然后引用。

[ ... ]是匿名数组构造函数,并将里面的列表变成一个arrayref。

所以@a = 1, 2, 3

[ @a ]

是相同的

[ 1, 2, 3 ]

(数组被展平为列表)或

do {
  my @b = @a;
  \@b;
}

实际上,元素被复制了。

还,

my ($ref1, $ref2) = (\@a, [@a]);
print "$ref1 and $ref2 are " . ($ref1 eq $ref2 ? "equal" : "not equal") . "\n";

会确认它们是一样的。如果我们这样做

$ref1->[0] = 'a';
$ref2->[0] = 'b';

那么$a[0]将等于a不是 b

于 2012-09-20T07:29:01.713 回答
3

您可以使用

perl -e 'my @a=(1); my $ra=\@a; my $rca=[@a]; $ra->[0]=2; print @a, @{$ra}, @{$rca};'
221

看看您对 [@existingarray] 创建对 @existingarray 副本的引用的假设是正确的(这myArray*不是 Perl)。

WRT amon 将我的perl -e "..."(在 bash 下失败)修改为perl -e '...'(在 cmd.exe 下失败):使用适用于您的 shell 的引号。

于 2012-09-20T07:29:41.560 回答
2

方括号引用了一个新数组,其中包含分配时@existingarray 中的内容的副本。

于 2012-09-20T07:28:11.167 回答