好吧,我有一个函数可以生成一个哈希树,dumper 打印出来看起来像这样:
$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' 会失败。但是,如果我转义点,则键不匹配...