请帮我简化一下这个程序 (perl的初学者)酷爱perl 100分
haokk 2002-07-20 03:21:54 这个程序用来把一个大文件分成10个小文件,大文件的格式如后,现在我写的这个程序那么多的if,elsif,我想把它给简化一下,请帮忙啊.我是初学者.
my $i=0; #count how many seq
my $n=2; #set how many seq in one file .
my $j=0; #count how many lines
#判段输入命令格式
if (-e $ARGV[0]){
open(INFILE ,"$ARGV[0]");
}else{
print " $! Useage : \n perl trim.pl filename!";
exit;
}
#得到当前格式化时间
sub sub_format_datetime
{
local($sec, $min, $hour, $day, $mon, $year) = @_[0..5];
sprintf("%4d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $day, $hour, $min, $sec);
};
#当前时间
$Time_Start = sub_format_datetime(localtime(time()));
print "Now = $Time_Start\n";
print "\n";
#计算行数和seq 的条数,并按每$n个seq放一个文件
sub count_line_seq{
while($line=<INFILE>){
if($line=~m/^>.*/){
$i++;
}
$j++;
if($i<=$n*1){
open(OUTFILE,">>trim_seq_1.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*2){
open(OUTFILE,">>trim_seq_2.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*3){
open(OUTFILE,">>trim_seq_3.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*4){
open(OUTFILE,">>trim_seq_4.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*5){
open(OUTFILE,">>trim_seq_5.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*6){
open(OUTFILE,">>trim_seq_6.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*7){
open(OUTFILE,">>trim_seq_7.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*8){
open(OUTFILE,">>trim_seq_8.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*9){
open(OUTFILE,">>trim_seq_9.seq");
print OUTFILE $line;
close(OUTFILE);
}else{
open(OUTFILE,">>trim_seq_10.seq");
print OUTFILE $line;
close(OUTFILE);
}
}
close(INFILE);
}
&count_line_seq;
#程序运行到现在的时间
$Time_End = sub_format_datetime(localtime(time()));
print "Running from [$Time_Start] to [$Time_End]\n";
print("............................................................\n");
#给出条数
print "total is $i seq. \n $j lines. ";>aesfeawfdsafds
gfdaaattt
fdsagfd
fggsgfsg
>bfdsgfhgfjytrhtr
dfsafdhgfrehgfs
fdsahgrfes
>cgdsfgfhf
dfsgfdshgfd
>retgfggf
gffggf
>rtytrhthht
gfhhd
>hgfdhgf
hggfj
>dhgfjtr
hgfdjgfjtfh
>hgfdjy
hgjuyyj
>ghjkoipoppooppo
gfghmjnxreyt
>hjtgrkjuoiuy
hfuwertbvfvjyt
>hjgtrkuoyoius
fdberwgbfd
>htgrdjytr
hgfjhgjk