2013-12-13 2 views
0

키 가득 스칼라 사용하여 멀티 레벨 해시 액세스 :는 XML을 구문 분석 할 때 나는 이런 식으로 뭔가를 할 노력하고있어

my $xml_hash_ref = XML::Parser...... 


my %fields_to_check = (
      '{Key1}{Key2}{Key3}{Key4}' => '..another hash...' 
      '{Key1}{DifferentKey2}' => '...another hash...' 
      '{Key1}{DifferentKey2}{DifferentKey3}' => '...another hash...' 
); 

foreach my $key (keys %fields_to_check){ 
    my $value = $xml_hash_ref->$key; 
} 

은 본질적으로 내가 해시의 해시의 큰 해시를 얻을 수 있습니다. 이 해시 구조에서이 구성 해시 % fields_to_check를 사용하여이 다양한 값에 액세스하려고합니다. 필수 $ 키는 내가 가고 싶은 곳으로 안내하는 키 문자열입니다. 누구나 이것이 가능하거나 다른 해결책을 알고 있다면 알 수 있습니까?

+1

다른 XML 파서는, 당신은 XPath의 사용을 허용하고 방법은 XML 노드에 액세스 할 수 호출합니다. 일부에서는 Perl 데이터 구조를 조작하는 것보다 덜 복잡하다는 것을 알 수 있습니다. – toolic

답변

0

여기에 거친 아이디어 : 같은 XML :: 나뭇 가지로

use strict; 
use warnings; 

my $deep_hash = { 
    aa => { 
     bb => { cc => 111, dd => 222 }, 
     ee => 333, 
    }, 
    ff => 444, 
}; 

sub dive { 
    my $h = shift; 
    for my $k (@_){ 
     return unless (ref($h) eq 'HASH' and exists $h->{$k}); 
     $h = $h->{$k}; 
    } 
    return $h; 
} 

dive($deep_hash, qw(aa bb dd)); 
관련 문제