在Perl中为数组添加索引和值

时间:2013-07-03 08:56:40

标签: arrays perl hash perl-data-structures

我是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://....'
      }
    ];

因此元素不会添加到数组的末尾 - 通过推送或非移位来完成 - 我试过拼接,但它不起作用。

3 个答案:

答案 0 :(得分:4)

您没有添加到数组,而是将键/值对添加到数组内的哈希中。您可以通过Data::Dumper输出

中使用的括号来查看此内容
$VAR1 = [     # <-- this means start of anonymous array ref
          {   # <-- this means start of anonymous hash ref

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

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

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

答案 1 :(得分: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'
          }
        ];

答案 2 :(得分:1)

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

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

<强>解释

要从引用中访问数组中的元素,请使用->。例如$arrayref->[0]为您提供第一个元素。第一个元素是对哈希的引用,所以再次使用->来访问它的元素。