I have a string :
$seq="IIIIIMMMMMMMMMMMOOOOOOOOOOOOOOOOMMMMMMMMMMMMMIIIIIMMMMMMMMMOOOOOOOOOOOOOOMMMMMMMMMMMMMIIIMMMMMMMMMMMOOOOOOOOOOOOOOOMMMMMMMMMMMIIIIIIMMMMMMMMMMMMMOOOOOOOOOOOOOOOOOOOOOOOMMMMMMMIIIMMMMMMMMMOOOOOOOOOOOOOOOOOOOOOOOOOOOMMMMMMMIIIIMMMMMMMMMMMOOOOOOOOOOOOOOOOOOOOOMMMMMMMIIIMMMMMMMMMOOOOOOOOOOOOOOOOOOOOOOOOOMMMMMMMMMIIIMMMMMMMMMMMOOOOOOOOOOOOOOOOOMMMMMMMMI";
and I want to find all groups of MMMMMM. I don't want to find only every position in the string that has 'M',
i.e. pos6, pos7, pos8, pos9 etc but I want to have something like:
1st group : pos 7-15
2nd group : pos 23-34
3rd group : pos 45-55
etc
my $seq = 'IIIIIMMMMMMMMMMMOOOO.....OOOOOOOOOOOOMMMMMMMMI';
my @seq = split(//,$seq);
my $flag = 0;
my $start = 0;
my $end = 0;
my $group = 0;
for my $i (0..$#seq) {
if ($seq[$i] eq 'M' && $flag == 0) { ($flag,$start) = (1,$i+1) }
if ($seq[$i] ne 'M' && $flag == 1) { ($flag,$end) = (0,$i) }
if ($end > $start) {
$group++;
push @results, "Group $group : pos $start-$end";
($start,$end) = (0,0);
}
}
print "$_<br />" for @results;