Perl搜索数组中包含的字符串

Jar*_*787 4 perl

我有一个包含以下值的数组:

push @fruitArray, "apple|0";
push @fruitArray, "apple|1";
push @fruitArray, "pear|0";
push @fruitArray, "pear|0";
Run Code Online (Sandbox Code Playgroud)

我想知道这个数组中是否存在字符串"apple"(忽略"| 0""| 1")

我在用:

$fruit = 'apple';
if( $fruit ~~ @fruitArray ){ print "I found apple"; }
Run Code Online (Sandbox Code Playgroud)

哪个不行.

Bor*_*din 5

不要使用智能匹配.它由于多种原因从未正常工作,现在标记为实验性的

在这种情况下,您可以使用grep相应的正则表达式模式

该程序测试每个元素,@fruitArray看它是否以字母开头,$fruit后跟管道字符|.grep返回与模式匹配的元素数,如果至少有一个匹配,则为

my @fruitArray = qw/ apple|0 apple|1 pear|0 pear|0 /;

my $fruit = 'apple';

print "I found $fruit\n" if grep /^$fruit\|/, @fruitArray;
Run Code Online (Sandbox Code Playgroud)

产量

I found apple
Run Code Online (Sandbox Code Playgroud)

  • 更新的perls(> = 5.19.5)带有[`any`](http://perldoc.perl.org/List/Util.html#any)子的List :: Util> = 1.33,其功能类似一个短路布尔"grep".普通`grep`将检查数组的每个元素,在极少数情况下可能会很慢(非常大的数组,例如) (3认同)