use strict; use warnings; my $str="-----MMMMM------IIIII----MMM---OOOO---I---MMMM-----"; my @my_splitted_str=split(//,$str); # add a sentinel value after the other characters, so # the end of the last range is properly detected push @my_splitted_str, "-"; my $range = ""; # we are not initially in a range my $start_of_range; for my $index ( 0 .. $#my_splitted_str ) { # if we are in a range, see if it ends now if ( $range && $range ne $my_splitted_str[$index] ) { # the previous character was the last of this range my $end_of_range = $index - 1; if ($end_of_range == $start_of_range) { print $start_of_range + 1, ":", $range, "\n"; } else { print $start_of_range + 1, "-", $end_of_range + 1, ":", $r +ange, "\n"; } $range = ""; } # see if this is the start of a range if (! $range && $my_splitted_str[$index] ne "-") { $start_of_range = $index; $range = $my_splitted_str[$index]; } }
In reply to Re^2: group things?
by ysth
in thread group things?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |