我是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://....'
}
];
因此元素不会添加到数组的末尾 - 通过推送或非移位来完成 - 我试过拼接,但它不起作用。
答案 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]
为您提供第一个元素。第一个元素是对哈希的引用,所以再次使用->
来访问它的元素。