1

我是 Perl 世界的新手,希望我能在这里得到你的帮助。

假设我有以下数组:

trap:  $VAR1 = [
      {
        'oid' => 'enterprises.12356.101.2.0.504',
        'type' => 'IPS Anomaly'
      }
    ];

我想向它添加更多索引,以获得以下结果:

trap:  $VAR1 = [
      {
        'oid' => 'enterprises.12356.101.2.0.504',
        'type' => 'IPS Anomaly',
        'attackid' => 'ID',
        'detail' => 'Some details',
        'url' => 'http://....'
      }
    ];

所以元素不会添加到数组的末尾 - 通过 push 或 unshift 完成的操作 - 我尝试过拼接,但它不起作用。

4

3 回答 3

4

您不是添加到数组中,而是将键/值对添加到数组内的哈希中。Data::Dumper您可以通过输出中使用的括号看到这一点

$VAR1 = [     # <-- this means start of anonymous array ref
          {   # <-- this means start of anonymous hash ref

所以基本上你有一个哈希数组。例如$VAR->[0]{'key'},您将使用的语法。

你应该知道你得到的结构只是图片的一半。在这种情况下,更重要的是你用来到达那里的代码,所以这就是你应该展示的。

此外,您应该知道哈希没有“开始”和“结束”:哈希是无序的,并且无法控制键/值的顺序。(以正常方式)

于 2013-07-03T09:23:38.510 回答
3

您可以执行以下操作,并假设您不关心一个哈希覆盖另一个哈希的键和值,您可以只使用哈希切片将一个哈希添加到另一个哈希,因为这是包含哈希的数组引用。

use strict;
use Data::Dumper;
use warnings;

my $arr_ref = [ { 'oid' => 'enterprises.12356.101.2.0.504', 'type' => 'IPS Anomaly' } ];
my %test = ('attackid' => 'ID', 'detail' => 'Some details') ;

@{$arr_ref->[0]}{ keys %test } = values %test;
print Dumper($arr_ref);

输出:

$VAR1 = [
          {
            'detail' => 'Some details',
            'attackid' => 'ID',
            'oid' => 'enterprises.12356.101.2.0.504',
            'type' => 'IPS Anomaly'
          }
        ];
于 2013-07-03T09:44:09.987 回答
1

这是一个包含单个哈希引用的数组引用。您可以使用以下方法将值添加到散列:

$arrayref->[0]->{'detail'} = 'Some details';
$arrayref->[0]->{'url'} = 'http://....';

解释:

要从数组引用访问数组中的元素,请使用->. eg$arrayref->[0]给你第一个元素。第一个元素是对哈希的引用,因此您再次使用->它来访问其元素。

于 2013-07-03T09:13:07.660 回答