Perl中的数组赋值

时间:2012-09-20 07:14:36

标签: arrays perl

之间有什么区别
myArr1 => \@existingarray

myArr2 => [
              @existingarray
          ]

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

我的意思是内部发生了什么。对于第一个数组,它指向同一个数组,对于第二个数组,它创建一个包含@existingarray

中元素的新数组

提前致谢

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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的引号。

答案 2 :(得分:2)

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