我正在编写一个脚本并尝试从存储在哈希中的数组中获取一些值。在谷歌搜索之后,搜索关于SO的问题(并且有一些类似的标题,但仍然没有解决或解决与我的有点不同的问题),并在检查Data Structures Cookbook并尝试一切合理的尝试,我来征求你的帮助。
我有一个哈希$action
和一个数组$action->{'Events'}
。这是print Dumper($action->{'Events'});
的输出:
$VAR1 = [{
'Muted' => 'something',
'Role' => 'something',
'Event' => 'something',
'Channel' => 'something',
'Talking' => 'something',
'UserNumber' => 'somenumber',
'CallerIDName' => 'somenumber',
'Conference' => 'somenumber',
'MarkedUser' => 'something',
'ActionID' => 'somenumber',
'CallerIDNum' => 'somenumber',
'Admin' => 'something'
}];
例如,我需要获得$action->{'EVENTS'}->{'CallerIDName'}
的值,但是这种语法和许多其他语法都不起作用。我甚至尝试了$action->{'EVENTS'}[6]
和$action->{'EVENTS'}->[6]
等等。
答案 0 :(得分:4)
这是哈希数组,请尝试这种方式:
$action->{'EVENTS'}[0]->{'CallerIDName'}
有关详细信息,请参阅perldsc。
已更新示例,例如:
use strict;
use warnings;
use Data::Dumper;
my $action = {};
$action->{'Events'} = [{'Muted' => 'something',
'Role' => 'something',
'Event' => 'something',
'Channel' => 'something',
'Talking' => 'something',
'UserNumber' => 'somenumber',
'CallerIDName' => 'somenumber',
'Conference' => 'somenumber',
'MarkedUser' => 'something',
'ActionID' => 'somenumber',
'CallerIDNum' => 'somenumber',
'Admin' => 'something'}];
#push hash into the array of hashes
push(@{$action->{'Events'}},{'Muted' => 'something',
'Role' => 'something1',
'Event' => 'something1',
'Channel' => 'something1',
'Talking' => 'something1',
'UserNumber' => 'somenumber1',
'CallerIDName' => 'somenumber1',
'Conference' => 'somenumber1',
'MarkedUser' => 'something1',
'ActionID' => 'somenumber1',
'CallerIDNum' => 'somenumber1',
'Admin' => 'something1'} );
for(my $i=0; $i < @{$action->{'Events'}}; $i++){
print Dumper($action->{Events}[$i]); #print entire hash in array index $i
#print callerIDName key(any key) of each hash
print Dumper($action->{'Events'}[$i]->{'CallerIDName'});
}
答案 1 :(得分:2)
您缺少的是$ action包含对数组的引用,因此下一部分必须取消引用该数组。然后在其中是一个哈希,你需要取消引用哈希。所以看起来应该是这样的:
$action->{'EVENTS'}[0]{'CallerIDname'}
(请注意,第一个以外的 - &gt;是可选的,所以这也很好:
$action->{'EVENTS'}->[0]->{'CallerIDname'}
完全相同的事情)
答案 2 :(得分:1)
外部的[]表示哈希在数组中。所以试试:
$action->{Events}->[0]->{CallerIDName}
您可以省略 - &gt;在{Events}和[0]之间,但为了清楚起见,我更喜欢它。它在这里没有什么区别,但它确实在其他地方。比较:
@array = (1,2,3);
$arrayref = \@array;
print $arrayref[0]; # accesses non-existent array @arrayref
print $arrayref->[0]; # '1'