perl 检查元素是否与另一个数组中的元素匹配

lmyy7pcs  于 2023-06-23  发布在  Perl
关注(0)|答案(2)|浏览(180)

我有一个数组:

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

我想设置一个next if语句,以便在字符串不包含这些元素之一时跳过。最好的办法是什么?
我想这样做可能会奏效:

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

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

所以只有“酒吧”和“你好”应该打印出来
我正在寻找最好的方法和最简单的方法来做到这一点。但是,我知道它们并不总是相同的,所以任何输入都是伟大的!

r7xajy2e

r7xajy2e1#

另一种方法可能是生成一个正则表达式来完成这项工作(如果您实际上需要一个不区分大小写的匹配,以便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/;
}
8dtrkrch

8dtrkrch2#

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;
}

相关问题