2015-05-21 6 views
0

Я пытаюсь извлечь данные из значения хэша.Perl извлечение данных из хэша

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

    foreach my $trigger (@{$triggers}) 
    { 

    push @triggerid,$trigger->{'triggerid'}; 

    my @t=$trigger->{'hosts'}; 
    my $lt = localtime($trigger->{'lastchange'}); 
    print "$trigger->{'description'} $lt \n"; 

    } 

Выход Dumper является

[ 
    { 
     'hosts' => [ 
        { 
         'hostid' => '19914', 
         'host' => 'pc10bcf18.syd.sf.priv' 
        } 
        ], 
     'priority' => '2', 
     'status' => '0', 
     'templateid' => '10652913', 
     'comments' => '', 
     'state' => '0', 
     'triggerid' => '10653191', 
     'expression' => '{15070357}#1', 
     'error' => '', 
     'url' => '', 
     'flags' => '0', 
     'value' => '1', 
     'name' => 'pc10_BizX_A_CF', 
     'description' => 'pc10bcf18.syd.sf.priv: Core Path not \'/dumps/java/core\' (Path=/export/home/jboss/j...)', 
     'value_flags' => '0', 
     'lastchange' => '1429181103', 
     'type' => '0' 
     }, 
]   

Из моего кода выше, я был в состоянии напечатать 'описание'. Как получить доступ к значению «host» и распечатать его?

ответ

1

Чтобы сохранить шаблон for/push, который вы уже закодировали, вы можете написать это

my $triggers = $zabbix->raw('trigger', 'get', $options); 

my @triggerid; 

for my $trigger (@$triggers) { 

    push @triggerid, $trigger->{triggerid}; 

    my @hosts; 
    my $hosts = $trigger->{hosts}; 
    for my $host (@$hosts) { 
    push @hosts, $host->{host}; 
    } 

    my $lt = localtime($trigger->{lastchange}); 
    print "$trigger->{description} $lt\n"; 
} 
-1

$triggers->{'hosts'}->[0]->{'host'}

+0

Пожалуйста, добавьте описание того, что делает ваш код. – brimble2010

1

Похоже, там может быть больше, чем один хозяин, так

my @hosts = 
    map { $_->{host} } 
     @{ $trigger->{hosts} }; 

Чтобы получить первый (при условии, что всегда будет по крайней мере один),

my $first_host = $trigger->{hosts}[0]{host};