【发布时间】:2011-09-08 00:13:09
【问题描述】:
我被一个看似简单的概念问题困扰着。在 Web 和 Stack Overflow 上苦苦寻找类似的问题后,我找不到类似的东西,所以我想我可以问你。
我正在构建一个深度嵌套的 hash of hash 数据结构。深度可以为10-20次。为了这个问题,我只列出深度一。
我无法在 Perl 中递归遍历下面的示例哈希。我也包含了我的代码。
它给了我以下错误:
在使用“strict refs”时,不能使用字符串(“1”)作为 HASH ref
很清楚:我的哈希必然有某些值为 1 的键。我无法避免它们。
$VAR1 = {
'Eukaryota' => {
'Rhodophyta' => {'count' => 5},
'Alveolata' => {'count' => 16},
'stramenopiles' => {'count' => 57},
'count' => 155,
'Glaucocystophyceae' => {'count' => 1},
'Cryptophyta' => {'count' => 18},
'Malawimonadidae' => {'count' => 1},
'Viridiplantae' => {'count' => 57},
},
'Bacteria' => {
'Cyanobacteria' => {'count' => 1},
'Actinobacteria' => {'count' => 4},
'count' => 33,
'Proteobacteria' => {'count' => 25},
'Deinococcus-Thermus' => {'count' => 2},
'Firmicutes' => {'count' => 1},
},
};
递归遍历此哈希的代码:
sub analyse_contig_tree_recursively {
my $TAXA_TREE = shift @_;
my $contig_hash = shift @_;
foreach (keys %{$TAXA_TREE}) {
print "$_ \n";
analyse_contig_tree_recursively($TAXA_LEVEL->{$_}, $contig_hash);
}
}
【问题讨论】: