0

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

像这样的东西(在伪代码中):

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

2 回答 2

3

这就是“新” 智能匹配运算符可用于:

#!/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中使用as ,或者,如果您的集合非常大,则使用 List::Util,因为它不会在第一次匹配后遍历整个列表。first

于 2012-12-05T09:27:05.863 回答
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(qwerty)

你可以$_用来测试任何东西,而不仅仅是平等。

如果您想做的事情很简单(可以用一行来表示),那么就可以了:

do_something if grep /^x$/, qw(q w e r t y)
于 2012-12-05T09:15:47.190 回答