私はオンラインで見て、誰もが同じ意味で使われていると言います。しかし、それは私の配列を反復処理していたときに私に異なる結果をもたらしました。Perl:forとforeachはなぜ私に異なる結果を与えるのですか?
私は、 60個の文字列要素を持ち、別の配列で一致するものを除外していました。しかし、私がforeach
を使用したとき、それは45要素の配列しか見なかったので、最終結果を印刷したときにすべてをフィルタリングしませんでした。
for
を使用したときだけ、私が望むように動作しました。これの背後にある理由は何ですか?
私はこの問題を解決することができましたが、今はその仕組みを理解したいだけです。ありがとう!
EDIT:だから私はここに例を提供していなかった私がやったことだ:
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'はレクサーと完全に区別できません。彼らはまったく同じものの2つの名前です。 – hobbs