perl循环读取文件时判断是否到最后一行

当需要去掉序列的分行符或者是建立序列的索引时,当序列文件较大时,不好将文件读入内存,需要一行一行的去读取,但怎样判断到了文件最后一行呢,在perl中一般用eof函数,但 eof 和带空圆括弧对 () 的 eof()表示的意思是不一样的,特别容易混淆。带圆括弧的 eof() 只是检测一组文件中的最后一个文件的文件结束,而 eof(没有圆括弧)在 while (<>) 循环里检查每个文件的文件结束。下面是建立fasta文件索引的代码。

#!/usr/bin/perl
use strict;
use warnings;
my $genome_file = “genomic.fna";
open(F, $genome_file);
#open(OUT, ">outfile");
my %chr2seq;
my $id="";
my $seq="";
while(<F>){
	if(/^>(\S+)/){
		if($id){
			$chr2seq{$id}=$seq;
			$seq="";
		}
		$id=$1;
	}else{
		s/\s+$//;
		$seq.=$_;
	}
	if(eof){
		$chr2seq{$id}=$seq;
	}
}