3 つのファイルを読み取り、それぞれのファイルを読み取った後に新しいファイルを書き込む Perl スクリプトがあります。すべてが 1 つのスレッドです。
このスクリプトでは、3 つのテキスト ファイルを開いて操作し、内容をハッシュに保存します。ファイルが大きい (3 MB 近く)。
ループを使用して各ファイルを処理しています (開く -> 読み取り -> アクションを実行 (ハッシュ テーブル) -> 閉じる)
最初のファイルをスキャンしているときに、Cygwin シェルの Perl ターミナル ウィンドウが動かなくなることに気付きました。Enter キーを押した瞬間に、スクリプトが残りのファイルを問題なく処理していることがわかります。
私のスクリプトには STDIN からの読み取りがないため、非常に奇妙です。さらに、すべてが同じループ内にあるため、3 つのファイルすべてに同じロジックが適用されます。
ここで誰かが同様の問題に直面しましたか? これは通常、大きなファイルや大きなハッシュを処理するときに発生しますか?
ここにスクリプトを投稿することはできませんが、投稿する内容はあまりありません。これは私の Cygwin シェルの問題でしょうか?
この問題が解決しない場合、どうすれば回避できますか? スクリプトの進行中にエンター入力を提供するようなものですか? さらに重要なことに、このような問題をどのようにデバッグできますか?
sub read_set
{
@lines_in_set = ();
push @lines_in_set , $_[0];
while (<INPUT_FILE>)
{ $line = $_;
chomp($line);
if ($line=~ /ENDNEWTYPE/i or $line =~ /ENDSYNTYPE/ or eof())
{
push @lines_in_set , $line;
last;
}
else
{
push @lines_in_set , $line;
}
}
return @lines_in_set;
}
--------> 私は問題を見つけたと思います :- または eof() 呼び出しは、スクリプトが動かなくなることを保証していました!! なんとなく初回だけハプニング。理由はわかりませんが