在Perl中的数组赋值

3
什么是两者之间的区别?
myArr1 => \@existingarray

and

myArr2 => [
              @existingarray
          ]

我正在将@existingarray分配给哈希映射中的一个元素。
我的意思是内部究竟发生了什么。对于第一个元素,它指向相同的数组,对于第二个数组,它是否创建了一个具有@existingarray元素的新数组?
提前感谢。

1
它们都会给出语法错误 :-) - Dave Cross
3个回答

8

是的,第一个函数取一个引用,第二个函数则先进行复制,然后再取一个引用。

[ ... ] 是匿名数组构造器,它将括号中的列表转换为一个数组引用。

所以对于 @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

3

您可以使用

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

要确认你的假设 [@existingarray] 创建了 @existingarray 的副本引用是正确的(并且 myArray* 不是 Perl)。

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


2
方括号表示引用一个新的数组,该数组包含在赋值时@existingarray中的内容的副本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接