#my $old_seq='ATGC---ACGT---TAGCAAGGTAAAT'; #my $new_seq='----AT-GC----ACGT----TAGCAA----------GGTAAAT---'; print "old seq is\n$old_seq\nnew seq is\n$new_seq\n"; my @old_array = split //, lc ($old_seq); my @new_array = split //, lc ($new_seq); my $n_old=0; my $n_new=0; my %gaps; while (my $old_base = shift @old_array){ my $new_base = shift @new_array; #print "base in oldseq is $old_base, base in newseq is $new_base\n"; if ($old_base eq $new_base){ # print "match!\n"; $n_old++; $n_new++; next; } else{ # print "no match! - must be a new gap at position $n_new new, $n_old old\n"; my $new_gap_length=0; while ($new_base = shift @new_array){ $n_new++; $new_gap_length++; # print "newbase is $new_base\n"; if ($new_base eq $old_base){ # print "found it - length was $new_gap_length\n"; $gaps{$n_new-$new_gap_length} = $new_gap_length; $n_old++; $n_new++; last; } } } } foreach (sort {$a <=> $b} keys %gaps){ print "gap at position in new $_, length $gaps{$_}\n"; }