my $pointer = 0;
foreach (@new1)
{
my $test = $_;
foreach (@chk)
{
my $check = $_;
chomp $check;
delete($new1[$pointer]) if ($test =~ /^$check/i);
}
$pointer++;
}
ifステートメントは、@new1配列の多くのエントリに配列要素の先頭に$checkが含まれているという事実と一致することはありません(少なくとも88)。これを試してみると一致しないため、問題の原因がネストされたループであるかどうかはわかりません。
foreach (@chk)
{
@final = (grep /^$_/, @new1);
}
@finalは空ですが、$_の少なくとも88個の全体が@new1にあることを私は知っています。
このコードはWindowsActivePerl5.14.2を実行しているマシンで作成しましたが、一番上のコードは機能します。次に(@ new1のコピーを使用して)2つを比較し、重複を削除します(5.14.2でも機能します)。ifの一致を否定しようとしましたが、@ new1配列が消去されたようです(ハッシュ比較を行う必要がなかったため)。
Perl5.8.0を使用してLinuxRedHatボックスでこのコードを実行しようとすると、正規表現での変数の一致に苦労しているようです。@ new1にあることがわかっている例でREGEXをハードコーディングすると、一致が機能し、最初のコードでエントリが削除されます(2番目のコードでは@finalに値が挿入されます)。
@chk配列はWebサーバー上のリストファイルであり、@ new1配列は、Webサーバーで2つのログファイルを開き、一方を他方にプッシュすることによって作成されます。
ループの反復ごとに$testと$checkを出力し、値のいずれかが一致するかどうか、およびそれらの一部が一致するかどうかを手動で確認するという問題に直面していました。
それは私を何日も困惑させ、私はタオルを投げ入れて助けを求めなければなりませんでした、何かアイデアはありますか?