Perl代码!它做什么(散列哈希)?

时间:2017-03-09 09:06:11

标签: perl hash

我目前正在处理上一个实习生写的一些代码。我对Perl并不熟悉所以我在理解他的代码实际做的事情上遇到了一些问题。所以它看起来像:

$Hash{Key1}{Key2}++; 

原始代码是:

$genotypes_parent2_array{$real_genotype}{$individu_depth}++; 

我用这个形式看哈希{Hash {Key}以获得价值,但是我很难与这个混淆。有帮助吗? 谢谢!

2 个答案:

答案 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}的值,这是哈希元素的值。