ファイル INPUT を取得しようとしていますが、そのファイルの行に文字列が含まれている場合は、その行を別のもの (改行を含む行全体) に置き換えるか、何も置き換えません (行を削除しますそこの)。これらすべてを新しいファイルに書き込みます。
これがコードのそのセクションです...
while(<INPUT>){
if ($_ =~ / <openTag>/){
chomp;
print OUTPUT "Some_Replacement_String";
} elsif ($_ =~ / <\/closeTag>/) {
chomp;
print OUTPUT ""; #remove the line
} else {
chomp;
print OUTPUT "$_\r\n"; #print the original line
}
}
while(<INPUT>)
一度に1行ずつ読み取り(私の理解が正しければ)、各行を特殊変数に保存する必要があります$_
ただし、上記のコードを実行すると、最初の if ステートメント条件が返さSome_Replacement_String
れ、1 回だけ取得されます。(1.3m のファイルから 1 行、600,000 回の置換が予想されます)。これは明らかに私が期待する動作ではありません。ファイル全体、すべての行のコピーを取得するようなwhile(<INPUT>){print OUTPUT $_;)
ことをすると、ファイル全体が読み取られていることがわかります (予想される動作)。
私がやろうとしているのは、行を取得してテストし、それを使って何かを行い、次の行に進むことです。
トラブルシューティングに役立つ場合print $.;
、その while ステートメント (またはその後) のどこかで使用すると、1 が返されます。これは「最後にアクセスしたファイルハンドルの現在の行番号」であると予想しました。そのため、while ステートメントがファイル全体をループするまでには、1 ではなく、ファイル内の行数に等しくなるはずです。
このコードの他のバリエーションをいくつか試しましたが、これが最も近いと思います。期待どおりの動作が得られないのには十分な理由があると思いますが、それが何であるか教えてもらえますか?