perl – 既に読み込まれているファイルハンドルからの再読み込み

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%が不必要にそれを行っていることに気づくべきです。あなたがそれを二度読む必要がないような方法であなたのデータを処理することを非常に懸命に試みなさい。それが可能であれば、あなたのプログラムはもっと便利になるでしょう。

転載記事の出典を記入してください: perl – 既に読み込まれているファイルハンドルからの再読み込み - コードログ