sub find_seq { my ($num,$array)=@_; # assert that @$array is sorted numerically increasing return if $num > @$array; # ensure array is big enough $num--; # num is one based, we need a 0 based value # the default return will be the first N values, # if we find better then we will overwrite these my $min_start = 0; my $min_end = $num; my $min = $array->[$num] - $array->[0]; # start at num as below that nothing can match for my $end ( $num .. $#$array) { my $start = $end - $num; my $diff = $array->[$end] - $array->[$start]; if ( $min > $diff ) { # we have found a better sequence, # so remember where it is $min = $diff; $min_end = $end; $min_start = $start; } # if the sequence is contiguous we can finish last if $diff == $num; } return ( $min_start, $min_end ); }