【发布时间】:2021-06-08 04:33:44
【问题描述】:
我决定尝试 Perl,我偶然发现了一种似乎有效的语言结构,但我简直不敢相信它是有效的。我想这背后有一些理由,所以我决定问一个问题。
获取以下 Perl 代码:
%data = ('John Paul' => ('Age' => 45), 'Lisa' => 30);
print "\$data{'John Paul'} = $data{'John Paul'}{'Age'}\n";
print "\$data{'Lisa'} = $data{'Lisa'}\n";
我的目的是检查哈希的哈希是如何工作的。上面的代码打印:
$data{'John Paul'} =
$data{'Lisa'} =
要使其成为一个有效的哈希散列,需要:
%data = ('John Paul' => {'Age' => 45}, 'Lisa' => 30);
结果是:
$data{'John Paul'} = 45
$data{'Lisa'} = 30
有谁知道:
- 为什么不统一,内部哈希需要
{}而不是()? - 当内部散列使用
()而不是{}时,为什么我没有收到错误或警告?很容易犯这样的错误。更重要的是,('Age' => 45)不仅破坏了'John Paul'的值,还破坏了'Lisa'的值。我无法想象在数千行代码的项目中寻找这种“错误”。
【问题讨论】:
-
括号仅表示 Perl 中的列表分组和优先级。他们从不创造任何东西。例如
(1, 2, 3)等同于(1, (2, 3)等同于(((1), ((2, (3)))))等等。他们做的唯一真正的功能就是开始一个列表。 -
要验证您放入数据结构的内容,请使用 Data::Dump (以及许多其他选项)将其转储。
use Data::Dump "pp"; pp \%data;