【发布时间】:2016-11-08 10:47:48
【问题描述】:
我正在阅读数组数组部分中 perldsc 的文档,它显示了数组数组的样子
@AoA = (
[ "fred", "barney" ],
[ "george", "jane", "elroy" ],
[ "homer", "marge", "bart" ],
);
在下一节的第 1 - 4 行中,它展示了如何生成一个
# reading from file
while ( <> ) {
push @AoA, [ split ];
}
我想学习如何创建一个。我创建了一个文件,里面有以下内容。
约翰·亚当·乔
罗德·弗雷德·詹姆斯
艾莉森·弗兰克·让
然后我使用示例中的代码创建了一个数组数组
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my @AoA;
while ( <> ) {
push @AoA, [ split ];
}
print Dumper(@AoA);
当我运行代码时,Dumper的内容是
$VAR1 = [
'John',
'Adam',
'Joe'
];
$VAR2 = [
'Rod',
'Fred',
'James'
];
$VAR3 = [
'Allison',
'Frank',
'Jean'
];
如我所见,它打印了 3 个数组,我认为它应该打印一个数组数组。
但我在运行相同的代码时进行了一些小修改
print Dumper(\@AoA);
打印出来了。
$VAR1 = [
[
'John',
'Adam',
'Joe'
],
[
'Rod',
'Fred',
'James'
],
[
'Allison',
'Frank',
'Jean'
]
];
这是一个数组数组。
这是我对 \@AoA 的理解。这是指向@AoA 的内存位置的指针。所以请澄清为什么我必须使用 \@AoA 来获得预期的输出?
更新
我认为 perlreftut 清楚地解释了我的困惑
Perl 5 中最重要的新特性之一是能够管理复杂的数据结构,例如多维数组和嵌套散列。为了实现这些,Perl 5 引入了一个称为引用的特性,使用引用是在 Perl 中管理复杂的结构化数据的关键。
Perl 中的引用类似于数组和散列的名称。它们是 Perl 的私有内部名称,因此您可以确定它们是明确的。与“巴拉克奥巴马”不同,引用只指一件事,你总是知道它指的是什么。如果你有一个数组的引用,你可以从中恢复整个数组。如果您有对哈希的引用,则可以恢复整个哈希。但参考仍然是一个简单、紧凑的标量值。 你不能有一个值是数组的散列;哈希值只能是标量。我们被困住了。但是单个引用可以引用整个数组,并且引用是标量,因此您可以拥有对数组的引用的散列,它的行为很像数组的散列,它就像一个有用的数组的哈希。
【问题讨论】:
-
print Dumper(@AoA);打印数组列表(同Dumper($AoA[0],$AoA[1], ..))
标签: perl