좋아, 내가 같이하는 인쇄물을 폐기장 해시 트리를 생성하는 기능이 있습니다펄 해시 - 해시 심판으로 ("") 문자열을 사용 할 수 없음을
$VAR1 = {
'shaders' => {
'stock_gui.vert' => '',
'stock_font.vert' => '',
'stock_gui.frag' => '',
'stock_font.frag' => ''
},
'textures' => {},
'fonts' => {
'DroidSansMono.ttf' => '',
'small' => {
'DroidSansMono.ttf' => ''
}
}
};
을
my $tmpHash = pop(@stack);
그런 다음 댐퍼 : 루프에서 다음
push (@stack, \%{$myHash->{'fonts'}});
:
는 지금은 글꼴 예를 들어 서브 트리를 반복 DFS에 노력하고 있습니다 $ 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'}}
그런 다음 잘 작동
.UPDATE : '.'문자열이 포함되어
- 경우 이 오류가 발생합니다. 하드 코딩 '작은'작품. 하드 코딩 'stock_gui.vert'는 내가 '.'을 벗어나지 않으면 실패합니다. 나는 점을 벗어날 경우 스스로를 실행하여 볼 수 있듯이 그러나 키는
use strict; use warnings; my $tmpHash = { 'DroidSansMono.ttf' => '', 'small' => { 'DroidSansMono.ttf' => '' } }; my $subChildrenCount = scalar keys(%{$tmpHash->{'small'}});
당신이 말하는 코드는 실제로 오류를 제공하지 않는 오류를 제공, ...
[perlref] (http://perldoc.perl.org/perlref.html)를 살펴보십시오. '\\'와'$ hash_ref'에 대해 혼란스러워하는 것 같습니다. – chrsblck
그런데'\ % {pop (@stack)}'은'pop (@stack)'을하는 이상한 방법입니다. – ikegami
내 perl은 녹슬었고, 나는 그곳에서 논쟁하지 않을 것이다. 그것에 대해 읽어보십시오. 팝은 이상했다 ... pop (@stack) 그 자체만으로도 잘 작동한다. – Halsafar