use strict; use warnings; my @probs = ( 0, 0.1, 0.53, 0.51, 0.59, 0.67, 0.2, 0.04, 0.05, 0.56, 0.89, 0.75, 0.1, 0.51, 0.6, 0.2, 0.7, ); my @inRange = grep { $probs[ $_ ] > 0.5 .. $probs[ $_ ] > 0.5 } 0 .. $#probs; my @starts = map { $inRange[ $_ ] } grep { $_ == 0 || $inRange[ $_ ] - $inRange[ $_ - 1 ] != 1 } 0 .. $#inRange; my @ends = map { $inRange[ $_ ] } grep { $_ == $#inRange || $inRange[ $_ + 1 ] - $inRange[ $_ ] != 1 } 0 .. $#inRange; printf qq{%3d%3d\n}, $starts[ $_ ], $ends[ $_ ] for 0 .. $#starts;