我想针对一小串字符串检查数组中的元素$columns[2]
。我现在的方式是;
if ( $columns[2] eq 'string1'
|| $columns[2] eq 'string2'
|| $columns[2] eq 'string3'
|| ...) {
...
}
似乎必须有比所有OR更好的方法。
答案 0 :(得分:6)
这正是grep
的用途:
my $element_exists =
grep { $columns[2] eq $_ } qw(string1 string2 ... stringN);
另一种方法是使用first
,它会在找到匹配后停止处理。这样,如果您首先匹配$columns[2]
字符串,则不必比较剩余的n-1字符串:
use List::Util qw/first/;
my $element_exists =
defined first { $columns[2] eq $_ } qw(string1 string2 ... stringN);
你也可以any
(正如@ThisSuitIsBlackNot在下面建议的那样),稍微不同的是首先返回匹配条件的元素的值,any返回一个布尔值:
use List::Util qw/any/;
my $element_exists =
any { $columns[2] eq $_ } qw(string1 string2 ... stringN);
答案 1 :(得分:0)
您可以使用正则表达式。 if($ columns [2] =〜/ ^ $ string1 | $ string2 | $ string3 $ /
确保使用^和$确保$ string1,2或3不仅仅包含在$ columns [2]中。