24小时热门版块排行榜    

查看: 284  |  回复: 1

shuangyang

金虫 (初入文坛)

[交流] 【求助】急!!!请教高手看一下perl程序里的循环问题?

为什么my $scafmatch =$allterm[7] - $allterm[6]不循环?之前的程序测试都对!急啊!!谢谢!
#!/usr/bin/perl -w
  2 use strict;
  3 unless (@ARGV == 3) {
  4     die "please check your input files and output files";
  5 }
  6 open IN,$ARGV[0] or die "$!\n";
  7 open FILE,$ARGV[1] or die "$!\n";
  8 open OUT,">$ARGV[2]" or die "$!\n";
  9 our @array;
10 $/ = ">";
11 ;
12 while( {
13     chomp;
14     my @all = split /\n/,$_;
15     my $name = shift(@all);
16     my @term = split /\s+/,$name;
17     my $scafname = shift (@term);
18     my $scaf = join "",@all;
19     my @base = split //,$scaf;
20     my $num = 0;
21     for my $i(@base) {
22         if ($i =~/[ATGCN]/) {
23                 $num++;
24         }
25     }
26 #    print OUT $scafname,"\t",$num,"\n";
27     my  @quary = ($scafname,$num);
28     push @array,[@quary];
29 }
30 close IN;
31 LABLE: while ( {
32        chomp;
33        my @allterm = split /\s+/,$_;
34        my $a = "";
35        my $rate = 0;
36        next LABLE if ($a eq $allterm[0]);
37        my $scafmatch = $allterm[7] - $allterm[6];
38        for my $i(0 ..$#array) {
39         if ($array[$i][0] eq $allterm[0] ) {
40              $rate = ( $scafmatch / $array[$i][1]);
41         }
42        print OUT $array[$i][0],"\t",$array[$i][1],"\t","the rate 0f match:\t",$rate,"\n";
43        $a = $allterm[0];
        }
45   }
46 close FILE;
47 close OUT;

[ Last edited by nono2009 on 2010-8-19 at 07:07 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

caucast

铁虫 (初入文坛)


nono2009(金币+1):鼓励应助。 2010-08-19 07:07:26
shuangyang(金币+2): 2010-08-19 09:09:48
有个错误蛮明显的。
你在while()循环末尾定义的 $a = $allterm[0]没有意义,因为在下一次循环中它都被开头的my $a=""给覆盖掉。你可以把my $a=""放在循环外面。
不知这个和你说的那个错误有没有关系。

ps:你貌似是先处理一个fasta文件,那个计数的循环是不是可以用length()函数代替,可以的话速度会提高很多。
2楼2010-08-19 01:30:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 shuangyang 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见