Hi monks,
I'm feeling a bit stuck. I basically am writing a sub-routine
that compares two strings of dna, and prints out any mismatches
that occur ( where good base-pairs are defined in the sub).
My problem is that if the mismatch occurs on the first or last base
of the string it messes up.
e.g. for a sequence:
ATCG
AAGG
Mismatches are present on first and last positions e.g. A/A and
G/G. I want the program to also print the bases either side of the mismatches
e.g. AT/AA and CG/GG. But if the mismatch is on the first position
it prints GA/GA and if it is on the last position it prints G/G.
How can I get it to not print
[$i -1] if the mismatch has occured on
the first position, and to not print
[$i+1] if the mismatch is on the last position.
Thanks for your help.
;-)
sub get_mismatches {
my ($segment, $comp_segment) = @_;
my @seg_mismatches;
my @seg_mis;
my $i;
my %good_pairs = (
'A' => 'T',
'C' => 'G',
'G' => 'C',
'T' => 'A',
);
foreach (my $i =0; $i < @$segment; $i++) {
if ($segment->[$i] ne $good_pairs {$comp_segment->[$i]}) {
push @seg_mismatches,"$segment->[$i-1]$segment->[$i]/$com
+p_segment->[$i-1]$comp_segment->[$i]\n";
push @seg_mismatches, "$segment->[$i]$segment->[$i+1]/$co
+mp_segment->[$i]$comp_segment->[$i+1]\n";
push @seg_mis, "$segment->[$i-1]$segment->[$i] $segment->
+[$i]$segment->[$i+1]\n";
}
}
return (\@seg_mismatches, \@seg_mis);
}
update (broquaint): escaped square brackets + title change (was strings)