~~Perl中的运营商是否存在相反的情况?我用它来匹配数组中的元素,如下所示:
my @arr = qw /hello ma duhs udsyyd hjgdsh/;
print "is in\n" if ('duhs' ~~ @arr);
Run Code Online (Sandbox Code Playgroud)
这打印is in.这很酷,因为我没有迭代所有数组并比较每条记录.我的问题是,如果我没有匹配,我想做点什么.我可以站在else一边,但我宁愿找到相反的"~~"
Lee*_*eft 12
您也可以使用List::Util(仅此模块的新版本)或List::MoreUtils与any,none和朋友.
use 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;
Run Code Online (Sandbox Code Playgroud)
虽然不是perl-native,但它不需要实验性的智能匹配.
除非==如果没有
print "is not in\n" unless ('duhs' ~~ @arr);
Run Code Online (Sandbox Code Playgroud)
注意:智能匹配在perl 5.18+中是实验性的.请参阅5.18中的智能匹配是实验/折旧 - 建议?所以请使用以下代码:
print "is not in\n" unless grep { $_ eq 'duhs' } @arr;
Run Code Online (Sandbox Code Playgroud)