2015-01-06 5 views
0

아래 웹 서비스 호출의 응답으로 데이터 구조를 얻고 있습니다.다중 레벨 해시에서 데이터 추출

my $triggers1 = $zabbix->raw('trigger','get', $options1); 
print Dumper($triggers1); 

출력

  $VAR1 = { 
        '10305122' => { 
         'hosts' => [ 
            { 
            'name' => 'pc4b12cf254444', 
            'maintenance_type' => '0', 
            'hostid' => '19295' 
            } 
           ], 
         'priority' => '1', 
         'status' => '0', 
         'dependencies' => [], 
         'templateid' => '9892568', 
         'comments' => '', 
         'state' => '0', 
         'triggerid' => '10305122', 
         'expression' => '{14127122}=0', 
         'error' => '', 
         'url' => '', 
         'flags' => '0', 
         'value' => '0', 


        } 


      324234' => { 
         'hosts' => [ 
            { 
            'name' => 'pc45657ba34gy0423', 
            'maintenance_type' => '0', 
            'hostid' => '19439' 
            } 
           ], 
         'priority' => '1', 
         'status' => '0', 
         'dependencies' => [], 
         'templateid' => '9896452', 
         'comments' => '', 
         'state' => '0', 

         'triggerid' => '10324234', 
         'expression' => '{14167689}=0', 
         'error' => '', 
         'url' => '', 
         'flags' => '0', 
         'value' => '0', 
         'value_flags' => '0', 
         'lastchange' => '1420266068', 
         'type' => '0' 

    }; 

이 출력에서, 나는 '이름'과 '가치'의 값을 인쇄 할 여러 유사한 기록

이 있습니다.

어떻게 이것을 펄을 사용하여 인쇄합니까?

답변

0

방법에 대해 : 가독성을 위해 데이터에서 분리

my $triggers1 = { 
       '10305122' => { 
        'hosts' => [ 
           { 
           'name' => 'pc4b12cf254444', 
           'maintenance_type' => '0', 
           'hostid' => '19295' 
           } 
          ], 
        'priority' => '1', 
        'status' => '0', 
        'dependencies' => [], 
        'templateid' => '9892568', 
        'comments' => '', 
        'state' => '0', 
        'triggerid' => '10305122', 
        'expression' => '{14127122}=0', 
        'error' => '', 
        'url' => '', 
        'flags' => '0', 
        'value' => '0', 


       }, 


     324234 => { 
        'hosts' => [ 
           { 
           'name' => 'pc45657ba34gy0423', 
           'maintenance_type' => '0', 
           'hostid' => '19439' 
           } 
          ], 
        'priority' => '1', 
        'status' => '0', 
        'dependencies' => [], 
        'templateid' => '9896452', 
        'comments' => '', 
        'state' => '0', 

        'triggerid' => '10324234', 
        'expression' => '{14167689}=0', 
        'error' => '', 
        'url' => '', 
        'flags' => '0', 
        'value' => '0', 
        'value_flags' => '0', 
        'lastchange' => '1420266068', 
        'type' => '0' 

} 
}; 

코드 :

foreach my $k (keys %$triggers1) { 
    print "key=$k"; 
    foreach my $h (@{$triggers1->{$k}{hosts}}) { 
     print "\nname=",$h->{name} // 'not defined'; 
     //    use this ^^ to avoid Use of uninitialized value in print at 
    } 
    print "\nvalue=",$triggers1->{$k}{value} // 'not defined',"\n"; 
} 

출력 :

key=324234 
name=pc45657ba34gy0423 
value=0 
key=10305122 
name=pc4b12cf254444 
value=0 
+0

쿨. 키와 값을 인쇄했습니다. 이름에 대한 print 문에서이 오류가 발생했습니다. 인쇄시 초기화되지 않은 값 사용 –

+0

@SandeepMadhu : 내 편집 참조. – Toto

+0

이 문장의 경우 '익명의 해시에있는 요소의 홀수'라는 오류가 발생합니다. my $ options1 = { 'nodeids' => '0', 'triggerids'=> 324234, 'output'=> '확장', 'selectHosts'=> { 'name', 'hostid', 'maintenance_status', 'maintenance_type', 'maintainid', 'description ','selectItems '=> {'itemid ','hostid ','key _ ','name ','value_type '},'selectDependencies '=>'확장 ','selectLastEvent '=>'1 ','expandDescription '=>'1 ','preservekeys '=>'1 '}}; 어떤 생각? –