我的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)
使用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)
当然,无论数组元素是什么,它都适用于数组的每个元素.
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |