2011-12-15 85 views
2

IM在比較2子sub1和從2個初始字符串seq1seq2只允許一個錯配$ksub2工作是子序列的長度子串比較

foreach (my $i = 0; $i < length($seq1) - $k; $i += 1) { 
    my $sub1 = substr($seq1, $i, $k); 
    foreach (my $j = 0; $j < length($seq2) - $k; $i++) { 
     my $sub2 = substr($seq2, $j, $k); 
     my $diff = $sub1^$sub2; 
     my $num_mismatch = $diff =~ tr/\0//c; 
     if ($num_mismatch == 1) { 
      $d{$sub1}++; 
     } 
    } 
} 
foreach (keys %d) { 
    print "$_\n"; 
} 

* 當我運行代碼它被卡住直到我殺了這個過程,它沒有給出任何結果。有關於此的任何幫助? *

+3

考慮使用Perl樣式的for循環,而不是C風格。例如。 `爲我的$ j(0 ..(長度($ seq2) - 1 - $ k))`。 – TLP 2011-12-15 00:45:24

回答

11
foreach (my $j=0;$j<length($seq2)-$k;$i++) 

應該

foreach (my $j=0;$j<length($seq2)-$k;$j++) 
            # ^^ 
+1

+1漂亮的趕上那裏。雖然你可能想在那裏突出顯示`j`,因爲很難發現。 – TLP 2011-12-15 00:46:31