当需要去掉序列的分行符或者是建立序列的索引时,当序列文件较大时,不好将文件读入内存,需要一行一行的去读取,但怎样判断到了文件最后一行呢,在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; } }