さて、ダンパーが次のように出力するハッシュツリーを生成する関数があります。
$VAR1 = {
'shaders' => {
'stock_gui.vert' => '',
'stock_font.vert' => '',
'stock_gui.frag' => '',
'stock_font.frag' => ''
},
'textures' => {},
'fonts' => {
'DroidSansMono.ttf' => '',
'small' => {
'DroidSansMono.ttf' => ''
}
}
};
今、たとえばフォントサブツリーをdfs反復しようとしています:
push (@stack, \%{$myHash->{'fonts'}});
次に、ループで:
my $tmpHash = pop(@stack);
次に、$tmpHash のダンパーが次のように表示されます。
$VAR1 = {
'DroidSansMono.ttf' => '',
'small' => {
'DroidSansMono.ttf' => ''
}
};
問題は、ハッシュ参照の子にアクセスしようとすることです。鍵を数えて、子供たちを見ることができます。ダンパー出力は問題ないようです。ただし、次のようなことをしようとしています:
foreach my $childKey ( keys $tmpHash ){
my $subChildrenCount = scalar keys(%{$tmpHash->{$childKey}});
}
エラーが発生します:
Can't use string ("") as a HASH ref while "strict refs" in use
これは $tmpHash がハッシュ参照だからだと思います。おそらくどこかで逆参照する必要があります。私は多くのことを試しましたが、すべてがさらなる問題を引き起こします。どんな助けでも感謝します。
私が試してみると:
%{$tmpHash->{'small'}}
その後、正常に動作します。
アップデート:
- 文字列に「.」が含まれている場合 すると、このエラーが発生します。ハードコーディング「小さい」作品。「.」をエスケープしない限り、「stock_gui.vert」のハードコーディングは失敗します。ただし、ドットをエスケープするとキーが一致しません...