和有什么区别
myArr1 => \@existingarray
和
myArr2 => [
@existingarray
]
我将 分配给@existingarray
哈希图中的元素。
我的意思是内部到底发生了什么。是不是对于第一个,它指向同一个数组,而对于第二个数组,它创建一个新数组,其中的元素@existingarray
提前致谢
是的,第一个引用,第二个复制然后引用。
[ ... ]
是匿名数组构造函数,并将里面的列表变成一个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
。
您可以使用
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 的引号。
方括号引用了一个新数组,其中包含分配时@existingarray 中的内容的副本。