私は単純な概念上の問題のように見えます。似たような問題をWebやStack Overflowで徹底的に探したところ、似たようなものは見つからなかったので、私はあなたに尋ねることができると思った。どのように再帰的に入れ子になったハッシュデータ構造を歩くのですか?
私は深くネストされたハッシュデータ構造のハッシュのハッシュを構築しています。深さは10〜20倍にすることができます。この問題のために、私は深さ1までしかリストアップしていません。
以下のサンプルハッシュをPerlで再帰的に処理することはできません。私は自分のコードも含んでいます。私のハッシュが、私はそれらを避けることができない値1を持つ特定のキーを持っているにバインドされています。ただ、それは明らかであるよう
Can't use string ("1") as a HASH ref while "strict refs" in use at
:それは私に次のエラーを与える
。
$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);
}
}
または 'スカラー::使用率:: reftype($ TAXA_TREE - > {$ _})EQ「HASH''、データ構造は祝福オブジェクトを含む可能性がある場合。 – mob
@ Giles:ありがとう。私のハッシュにはハッシュリファレンスを指していないキーがあり、再帰の終わりを知らせることができます。 $ TAXA_LEVEL、$ contig_hashについて:これらは処理に使用する他の変数の一部です。主な問題は今ではっきりしていて、私のプログラムはうまくいきます...あなたたちは素早く素晴らしいです。一房ありがとう – Abhi
男よ、あなたは速いです。単にあなたの構造を見たいだけで、それを使って何かをする必要がない場合は、[Data :: Dumper](http://perldoc.perl.org/Data/Dumper.html)を使用してください。あなたがハッシュやハッシュのリスト、またはリストのハッシュのリストなどのハッシュになったときに、それはオブジェクト指向プログラミングについて考え始める時です。セットアップに数分かかりますが、後でデバッグの心配をたくさん節約できます。ワンショットでもお勧めです。 –