깊게 중첩 된 구조 인 해시가 있습니다. 중첩 수준은 사전에 알 수 없습니다. 그러나 각 수준에는 두 개의 속성 "인스턴스"와 "종속성"의 또 다른 해시가 있습니다. 그래서 일종의 재귀적인 해시입니다.Perl : 서브 루틴에서 hashref를 반환합니다.
my $HASH = {
"top"=> {
"instance" => "top_instance",
"dependencies" => {
"sub_block1" => {
"instance" => "sub_block1_instance",
"dependencies" => {}
},
"sub_block2" => {
"instance" => "sub_block2_instance",
"dependencies" => {
"sub_block3" => {
"instance" => "sub_block3_instance",
"dependencies" => {}
}
}
}
}
}
};
나는 사용자 정의 문자열을 받아들이고 지정된 계층 구조에서 해시의 내부 부분을 반환하는 서브 루틴을 가지고 있습니다.
사용자가 "sub_block2"를 지정하는 경우예, 서브 루틴이 해시 반환해야합니다 : 당신이 볼 수 있듯이,이 재귀가
sub get_starting_point {
my $string = shift;
my $config = shift;
foreach my $key (keys %$config) {
if($key ne $string) {
# if current key is not what user asked for, recurse into next level of hierarchy
if (exists $$config{$key}{dependencies}) {
&get_starting_point($$config{$key}{dependencies});
}
} else {
# we found the key, return the hash under this hierarchy
my $tempHash = {$key => $$config{$key}};
print ref($tempHash); # correctly prints HASH
print Dumper($tempHash); # correctly prints out the sub-hash
return $tempHash; # I am expecting this return value to be a hash-ref
}
}
}
입니다 : 이것은 내 서브 루틴이
{
"sub_block2" => {
"instance" => "sub_block2_instance",
"dependencies" => {
"sub_block3" => {
"instance" => "sub_block3_instance",
"dependencies" => {}
}
}
}
}
입니다 함수는 인수와 일치하는 키를 치고 해당 키 아래의 완전한 하위 해시를 반환 할 때까지 해시를 깊이있게 유지합니다.
이렇게하면이 서브 루틴을 호출합니다.
my $subHash = get_starting_point("sub_block2",$HASH);
print ref($subHash); # is not a ref
print Dumper($subHash); # prints nothing
내가 뭘 잘못하고있어!?!?
편집 : 내 정확한 문제로 질문을 업데이트했습니다. 기대했던대로 일하기 전에 사용했던 간단한 예처럼 보입니다.
표시된 코드에 아무 문제가 없습니다. 복사 및 붙여 넣기, 가져 오기 추가, C 스타일 주석 제거 (perl 주석 사용) # 예상대로 인쇄되었습니다. 정확한 코드를 보여줄 수 있습니까? 엄격한 경고를 사용하고 있습니까? – Nate
hashref를 * 사용하려고 할 때 문제가 발생했다고 생각합니다. 당신이 시도하고있는 것을 보여주십시오. http://perlmonks.org?node=References+quick+reference에는 참조 번호 – ysth