Data::Dumper 是探索这里发生的事情的好工具。它使您的数据结构可视化变得容易。
如果我们运行您的代码,然后使用 Data::Dumper 显示 @f,我们会得到:
$VAR1 = [
2,
3,
3,
4,
4,
5,
5,
6,
6,
[ ... snip ... ]
40,
40,
41,
41,
42,
42,
43
];
所以这不是你想要的。如果你将一个数组压入另一个数组,那么 Perl 只会将第二个数组中的每个元素添加到第一个数组的末尾。无法分辨哪个元素属于哪个数组。这称为“数组展平”。
这是因为数组中的元素只能保存一个标量值。另一个数组不是标量值。但是我们可以将一个reference指向一个数组,然后它就是一个标量值。您可以使用 \ 获得对数组的引用。
对代码的更改很简单:
my @e=($i+=2, $i+1); # declare @e inside the loop
push(@f,\@e); # Take a reference
我们现在得到的输出是:
$VAR1 = [
[
2,
3
],
[
3,
4
],
[
4,
5
],
[ ... snip ... ]
[
39,
40
],
[
40,
41
],
[
41,
42
],
[
42,
43
]
];
您可以清楚地看到主数组中的各个“子数组”。
perllol 手册页中对此进行了详细介绍,您可以在 perlreftut 和 perlref 中找到有关参考的更多信息。