Perl:数组引用与匿名数组

wen*_*ang 8 arrays perl

这可能是一个愚蠢的问题...下面的代码输出的内容@arrayref@arraycont分别.请注意它们之间的差异以及它们的值的分配方式.我知道匿名数组的作用,但有人可以解释为什么会有区别吗?

非常感谢你.

@arrayref = ();
@array = qw(1 2 3 4);
$arrayref[0] = \@array;
@array = qw(5 6 7 8);
$arrayref[1] = \@array;
print join "\t", @{$arrayref[0]}, "\n";
print join "\t", @{$arrayref[1]}, "\n";

@arraycont = ();
@array = qw(1 2 3 4);
$arraycont[0] = [@array];
@array = qw(5 6 7 8);
$arraycont[1] = [@array];
print join "\t", @{$arraycont[0]}, "\n";
print join "\t", @{$arraycont[1]}, "\n";
Run Code Online (Sandbox Code Playgroud)

输出

5   6   7   8   
5   6   7   8   
1   2   3   4   
5   6   7   8   
Run Code Online (Sandbox Code Playgroud)

yam*_*men 11

这将创建数组的浅表副本:

$arraycont[0] = [@array];

虽然这只是创建了它的引用:

$arrayref[0] = \@array;

由于您以后修改了数组:

@array = qw(5 6 7 8);

arrayref仍然指向内存中的相同数组位置,因此当在print语句中取消引用时,它会打印当前数组值5 6 7 8.