我目前正在处理上一个实习生写的一些代码。我对Perl并不熟悉所以我在理解他的代码实际做的事情上遇到了一些问题。所以它看起来像:
$Hash{Key1}{Key2}++;
原始代码是:
$genotypes_parent2_array{$real_genotype}{$individu_depth}++;
我用这个形式看哈希{Hash {Key}以获得价值,但是我很难与这个混淆。有帮助吗? 谢谢!
答案 0 :(得分:4)
%genotypes_parent2_array
是一个哈希值(因此对于变量来说这不是一个非常好的名称!)哈希值中的每个值都是一个哈希引用。所以你有效地得到哈希值。
$genotypes_parent2_array{$real_genotype}
在哈希中查找键$real_genotype
。这个值(如上所述)是一个哈希引用。如果您有哈希引用,则可以使用箭头在引用的哈希中查找值。因此,我们可以使用以下代码获取二级哈希值:
$genotypes_parent2_array{$real_genotype}->{$individu_depth}
然而,Perl有一个很好的语法糖。如果您有两对彼此相邻的“查找括号”(我们这里有),您可以省略箭头。所以你可以得到完全相同的效果:
$genotypes_parent2_array{$real_genotype}{$individu_depth}
这就是我们在这里所拥有的。我们在哈希$real_genotype
中查找键%genotypes_parent2_array
。这给了我们一个哈希引用。然后,我们在引用的数组中查找键$individu_depth
,并在第二级哈希中提供值。然后,您的代码会递增该值。
手册页perldoc perldsc是使用引用在Perl中构建复杂数据结构的很好的介绍。另外,我发现Data::Dumper对于展示复杂数据结构的外观非常有用。
答案 1 :(得分:-1)
%Hash
是哈希哈希。
该代码将1
添加到$Hash{Key1}{Key2}
的值,这是哈希元素的值。