我在网上看,每个人似乎都说他们互换使用。但是,当我遍历数组时,它给了我不同的结果。我有一个约数组的数组。 60个字符串元素,并过滤掉在另一个数组中匹配的内容。但是,当我使用foreach
,只看到了45个元素的数组,所以当我打印的最终结果,它没有过滤所有的东西。Perl:为什么for和foreach会给我不同的结果?
只有当我用for
它的工作,因为我想要的。这背后的原因是什么?
我设法解决这个问题,现在我只是想了解这种工作方式。谢谢!
编辑:所以我没有提供任何例子所以这里就是我所做的:
my $i = 0;
foreach my $item (@array){
print "\n$i : $item";
foreach my $exclude_item (@exclude){
chomp $exclude_item;
if ($exclude_item eq $item){
print "\nDEBUG: Removing $item";
splice @array, $i, 1;
}
}
$i++;
}
上面没有给我的@array
的完整列表,所以当我打印的最终结果,有元素里面应该已经过滤了。
所以,我想这不是(这工作,因为我想):
for (my $i=0; $i < scalar @array; $i++){
print "\n$i : $array[$i]";
foreach my $exclude_item (@exclude){
chomp $exclude_item;
if ($exclude_item eq $array[$i]){
print "\nDEBUG: Removing $array[$i]";
splice @array, $i, 1;
}
}
}
只是额外的信息,该@array
是通过搜索多个文件夹中的子目录的列表中创建。可能@array
包含重复项。
其他的不同。 “for”和“foreach”与词法分析器完全没有区别。他们是两个完全相同的名字。 – hobbs