在Perl的~~对面

时间:2014-07-31 12:31:47

标签: perl

Perl中的运算符~~是否相反?我用它来匹配数组中的元素:

my @arr = qw /hello ma duhs udsyyd hjgdsh/;
print "is in\n" if ('duhs' ~~ @arr);

这会打印is in。这很酷,因为我不必迭代所有数组并比较每条记录。我的问题是,如果我没有匹配,我想做点什么。我可以去else方,但我宁愿找到相反的“~~'

2 个答案:

答案 0 :(得分:12)

您还可以使用List::Util(仅限此模块的较新版本)或anynoneuse List::Util qw(any none); my @arr = qw /hello ma duhs udsyyd hjgdsh/; say "oh hi" if any { $_ eq 'hello' } @arr; say "no goodbyes?" if none { $_ eq 'goodbye' } @arr; 和朋友一起使用。

{{1}}

虽然不是perl-native,但它不需要实验性的智能匹配。

答案 1 :(得分:9)

除非==如果不是

print "is not in\n" unless ('duhs' ~~ @arr);

注意:智能匹配在perl 5.18+中是实验性的。请参阅Smart matching is experimental/depreciated in 5.18 - recommendations?所以请改用以下内容:

print "is not in\n" unless grep { $_ eq 'duhs' } @arr;