我有一个包含以下值的数组:
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)
哪个不行.
不要使用智能匹配.它由于多种原因从未正常工作,现在标记为实验性的
在这种情况下,您可以使用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)