Perl检查元素是否包含在数组中

时间:2015-01-16 21:24:41

标签: perl

我有一个数组:

@Names = (A,B,C,D,E)

如果字符串不包含其中一个元素,我想设置下一个要跳过的if语句。最好的方法是什么?

我认为这样的事情可能有用:

@someArray = (Foo, Bar, Yim, Print, Hello);

foreach my $string (@someArray) {
   next if ( $_ !~ $string ) @Names;
   print $string;
}

因此只打印出“Bar”和“Hello”

我正在寻找最佳方式来做到这一点。以及最简单的方式来做到这一点。但我知道它们并不总是一样,所以任何输入都很棒!

2 个答案:

答案 0 :(得分:1)

另一种方法可能是生成单个正则表达式来完成工作(如果您确实需要不区分大小写的匹配,以便Hello匹配,您也应该使用i修饰符: /$NamesRE/i):

use warnings;
use strict;

my @Names     = qw(A B C D E);
my @someArray = qw(Foo Bar Yim Print Hello);

my $NamesRE = join '|', map {quotemeta} @Names;

for my $string (@someArray) {
    print "$string\n" if $string =~ /$NamesRE/;
}

答案 1 :(得分:0)

first会在找到匹配后立即停止比较。对于Bar,一旦A匹配,它就不会检查B-E。

use warnings;
use strict;
use List::Util qw(first);

my @Names     = qw(A B C D E);
my @someArray = qw(Foo Bar Yim Print Hello);

for my $string (@someArray) {
    print "$string\n" if first { $string =~ /$_/i } @Names;
}