紧急求助,急死了..
紧急求助,急死了..
在写一个perl 程序,读给定的一个文档,对于每一行,取出值来,然后要在shell下算一下(只要在当前目录下运行make $seq.paml, $seq即为取出的值, 然后这个外部程序就会计算出一个值), 然后我就去读这个值写到另一个文档,然后再去读指定文件的下一行,,,
我觉得程序在逻辑上都对的啊,怎么只循环了一次就结束了??? 也就是只处理了指定文件的一行,就终止了, 帮我看下啦,,,急死了都!!!!!!!!!!!!
我把这个对单独的行取值,然后运行make, 返回值的过程写了个subroutine
#!/bin/perl -w
use strict;
use warnings;
#################subroutine_read_yn_report#########
sub get_ka_ks{
my($seq1,$seq2)=@_; ####传送参数
... ... ######数据处理,略去
system "make seq.paml_kaks"; #######运行make, 然后生成一个叫做YN的文件,结果就在这个里面,于是
open(PID,"yn");
while(<PID>){
........................#此处是处理这个YD文件,取出需要的值
}
close PID;
return my@foods=($ka_mean,$ka_se,$ks_mean,$ks_se);
} 返回计算出来的值
#############################subroutine 结束###############
正文程序就是每次读指定文件的一行, 然后运行上面这个子程序,将传送回来的参数写进一个叫results的文件,
my$filename='aignment_exons_mm7.txt'; ###指定的文件
my$wr_file='final_results'; #####对每行处理后,将算出的值写到这个文件
open(FID,$filename);
open(ZID,">$wr_file");
while(<FID>){
...........###数据处理,取出自变量$seq_human,$seq_mouse
my@results=get_ka_ks($seq_human,$seq_mouse); ######执行子程序
print ZID $anno,"\t",$results[0],"\t",$results[1],"\t",$results[2],"\t",$results[3],"\n";###打印到目的文件
}
我觉得没有问题啊,,,为什么这个主程序的循环只执行一次,算一行就中止了啊,急死了,大家帮下我吧,谢谢...