我正在从Perl 中的 ARGV 文件句柄(即读取和处理一个常规文件句柄的输入流,它可能是 STDIN。但是,我需要分析输入的重要部分,以便检测它以四种不同但极其相似的格式中的哪一种进行编码(FASTQ 质量分数的不同 ASCII 编码;请参见此处)。一旦我决定了数据的格式,我需要返回并再次解析这些行以实际读取数据。while(<>)
构造)
所以我需要读取流的前 500 行左右两次。或者,换个角度来看,我需要阅读前 500 行,然后将它们“放回原处”,这样我就可以再次阅读它们。因为我可能正在阅读 STDIN,所以我不能只是回到开头。而且文件很大,所以我不能只将所有内容读入内存(尽管将前 500 行读入内存是可以的)。最好的方法是什么?
或者,我可以以某种方式复制输入流吗?
编辑:等一下。我刚刚意识到我不能再将输入作为一个大流处理,因为我必须独立检测每个文件的格式。所以我不能使用 ARGV。不过,剩下的问题仍然存在。