我有一个数组:
@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”
我正在寻找最佳方式来做到这一点。以及最简单的方式来做到这一点。但我知道它们并不总是一样,所以任何输入都很棒!
答案 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;
}