需要帮助找出工作的perl代码来代替“@ray”中的任何元素
%hash = (key1 => 'value1',key2 => 'value2',key3 => 'value3',);
@array= ('value3','value4','value6');
if ($hash{ 'key1' } ne <<any of the elements in @array>>) {print "YAY!";}
答案 0 :(得分:5)
CPAN解决方案:使用List::MoreUtils
use List::MoreUtils qw{any};
print "YAY!" if any { $hash{'key1'} eq $_ } @array;
为什么要使用此解决方案而不是替代方案?
在5.10之前不能在Perl中使用智能匹配
grep
解决方案循环遍历整个列表,即使1,000,000长列表的第一个元素匹配也是如此。 any
会在发现第一场比赛时发生短路并退出,因此效率更高。
答案 1 :(得分:4)
5.10+解决方案:使用smart-match!
say 'Modern Yay!' unless $hash{$key} ~~ @array;
答案 2 :(得分:1)
您可以使用grep功能。这是一个基本的例子:
print "YAY!" if grep { $hash{'key1'} eq $_ } @array;
在像这样的标量上下文中,grep将为您提供@array
中匹配条目的数量。如果那不是零,那么你就是匹配。
答案 3 :(得分:1)
你也可以使用哈希:
@hash{"value3","value4","value6"}=undef;
print "YAY" if exists $hash{key1};