在Perl中,针对多个值测试变量的最佳方法是什么?
像这样(伪代码):
if x is in {'q','w','e','r','t'}
# do something
答案 0 :(得分:3)
这是"new" smart match operator可用于:
#!/usr/bin/env perl
use strict;
use warnings;
use 5.10.0;
my $thing = 'bar';
my @set = qw(foo bar baz);
say 'ok!' if $thing ~~ @set;
输出:
ok!
注意:这在古代版本的perl中不可用。在5.10之前,您希望在grep
中使用other answer,或者,如果您的集合非常大,则first
of List::Util,因为在第一次匹配后它不会遍历整个列表。
答案 1 :(得分:2)
怎么样:
if (grep /^x$/, ('q', 'w','e','r','t')) {
# Do something
}
如果您要比较的值是标量(字符串或数字),则此方法有效。
对于字符串,有一个很好的速记:
if (grep /^x$/, qw(q w e r t y)) {
# Do something
}
如果您不喜欢正则表达式(/^x$/
),则有:
grep {$ _ eq'x'} qw(q w e r t y)
您可以使用$_
来测试任何内容,而不仅仅是相等。
如果您想要做的事情很简单(可以用一行表示),那么这样做:
do_something if grep /^x$/, qw(q w e r t y)