私はPerlのARGVファイルハンドル(つまりからの入力ストリームを読み取って処理しています。通常のファイルハンドルはSTDINの場合があります。ただし、入力のかなりの部分を分析して、4つの異なるが非常に類似した形式のどれでエンコードされているかを検出する必要があります(FASTQ品質スコアの異なるASCIIエンコード。ここを参照)。データの形式を決定したら、実際にデータを読み取るために、戻ってそれらの行をもう一度解析する必要があります。while(<>)
コンストラクト)
したがって、ストリームの最初の500行程度を2回読み取る必要があります。または、別の見方をすると、最初の500行を読み取ってから、もう一度読み取ることができるように「元に戻す」必要があります。私はSTDINから読んでいる可能性があるので、最初に戻ることはできません。また、ファイルは巨大であるため、すべてをメモリに読み込むことはできません(ただし、最初の500行をメモリに読み込むことは問題ありません)。これを行うための最良の方法は何ですか?
または、入力ストリームを何らかの方法で複製できますか?
編集:ちょっと待ってください。各ファイルの形式を個別に検出する必要があるため、入力を1つの大きなストリームとして処理できないことに気づきました。そのため、ARGVを使用できません。ただし、残りの質問はまだ残っています。