【问题标题】:Perl extracting data from a hashPerl 从哈希中提取数据
【发布时间】:2015-05-21 12:08:21
【问题描述】:

我正在尝试从哈希值中提取数据。

   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'
      },
]          

从我上面的代码中,我能够打印“描述”。如何访问和打印“主机”值的值?

【问题讨论】:

    标签: perl hash


    【解决方案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";
    }
    

    【讨论】:

      【解决方案2】:

      看起来可以有多个主机,所以

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

      要获得第一个(假设总是至少有一个),

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-22
          • 1970-01-01
          • 1970-01-01
          • 2015-04-25
          • 1970-01-01
          • 2012-03-30
          • 2011-04-20
          相关资源
          最近更新 更多