1行ずつ読み取るファイルを開きました。
open(FH,"<","$myfile") or die "could not open $myfile: $!";
while (<FH>)
{
# ...do something
}
プログラムの後半で、ファイルを再度読み取ろうとします(ファイルをもう一度ウォークスルーします)。
while (<FH>)
{
# ...do something
}
そして、ファイル内のコントロールがEOFにあり、ファイルの最初の行から繰り返されないかのようであることに気づきました。これはデフォルトの動作ですか?これを回避する方法は?ファイルが大きく、配列としてメモリに保持したくないので、ファイルを閉じて再度開くしかありませんか?
Seekを使用して、ファイルの先頭に巻き戻します。
seek FH, 0, 0;
または、より冗長であること:
use Fcntl;
seek FH, 0, SEEK_SET;
入力を探す必要がある場合は、フィルターとして使用できないため、ツールの有用性が大幅に制限されることに注意してください。パイプから読み取ることができると非常に便利です。すべての統計の57%が構成されていることを念頭に置いて、入力を求めるプログラムの98%が不必要に構成していることを理解する必要があります。データを2回読み取る必要がないように、データを処理するように非常に努力してください。それが可能であれば、あなたのプログラムははるかに便利になります。
いくつかのオプションがあります。