如何使用foreach循环检查数组的哪些元素等于给定的字符串?

Que*_*Guy 0 perl foreach

我的foreach循环不能按照我的意愿工作.我希望它循环遍历数组,并找到一个元素存在的时间和元素不存在的时间.但是,我得到了所有人的说法Not an apple.

@fruit = ('apple','orange','pear');

foreach(@fruit){
     if(@fruit != 'apple'){
          print "Not an apple\n";
     }
     else{
          print "Is an apple\n";
     }
}
Run Code Online (Sandbox Code Playgroud)

Сух*_*й27 7

使用eq(相等)和ne(不相等)比较字符串.$_是隐式foreach变量,它应该像,

if ($_ ne 'apple')
Run Code Online (Sandbox Code Playgroud)

如果要使用显式循环变量:

foreach my $v (@fruit) {

     if($v ne 'apple'){
          print "Not an apple\n";
     }
     else{
          print "Is an apple\n";
     }
}
Run Code Online (Sandbox Code Playgroud)

现在,为什么要"Not an apple\n"为所有元素打印所有元素@fruit?首先,!=左侧的结果在标量上下文中进行评估,该结果给出了元素的数量@fruit,即3.另一方面,'apple'不是数字,0在这个数字比较中求值相等.因此,if对于数组的每个元素,条件减少为:

if (3 != 0) {
Run Code Online (Sandbox Code Playgroud)

当然,无论数组元素是什么,它都适用于数组的每个元素.