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); my @pos; my @segment; foreach (0..$#probs){ no warnings 'uninitialized'; my $start; if ($probs[$_] > 0.5 && $probs[$_+1] <= 0.5){ push @pos, $_; } elsif ($probs[$_] <= 0.5 && $probs[$_+1] > 0.5) { push @pos, $_ + 1; } } use Data::Dumper; print Dumper \@pos;