条件语句 - 与数组中的值存储进行比较

时间:2010-12-20 18:08:01

标签: perl conditional

需要帮助找出工作的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!";}

4 个答案:

答案 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};