根据一组值测试变量

时间:2012-12-05 09:09:58

标签: perl

在Perl中,针对多个值测试变量的最佳方法是什么?

像这样(伪代码):

if x is in {'q','w','e','r','t'}
  # do something

2 个答案:

答案 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)