我有一个数组哈希(HoA)。我一直使用$arrayrefs
处理此HoA的值。但是,现在我需要根据$key
检索$arrayrefs
。
my %a = ( 1 => "ONE" ,
2 => "TWO" ,
3 => " Three", );
my %aa = ( 4 => [ 'ONE' , 'TWO', 'THREE'],
5 => ['one' , 'two', 'three'],
6 => ['more', 'dos', 'some'],
);
my @array = ('ONE' , 'TWO', 'THREE');
my $array_ref = \@array;
# returns the $key where the $value is 'ONE'
my ($any_match) = grep { $a{$_} eq 'ONE' } keys %a;
print $any_match."\n"; # this returns '1', as expected.. Good!
my ($match) = grep { $aa{$_} eq @$array_ref } keys %aa;
print $match."\n"; # <--- error: says that match is uninitialized
在上一篇print
声明中,我希望它返回4.有人知道怎么做吗?
答案 0 :(得分:3)
您无法将数组与eq
进行比较。一个简单的解决方案是将两个数组转换为字符串并使用eq
比较字符串:
my ($match) = grep { join("", @{$aa{$_}}) eq join("", @$array_ref) } keys %aa;
为了比较阵列,您还可以使用CPAN中的许多模块中的一个,例如: Array::Compare
,List::Compare
等
答案 1 :(得分:2)
始终use strict; use warnings;
。添加use v5.10;
,因为Perl(v5.10 +)智能匹配将用于比较数组。执行以下操作:
my ($match) = grep { @{$aa{$_}} ~~ @$array_ref } keys %aa;
此处使用智能运算符~~
来比较数组。