# initialisation as before $cur = $best = $array[$cur_start] if @array; for (1..$#array) { $cur += $array[$_]; if ($best < $cur) { $best = $cur; $best_start = $cur < 0 ? $_ : $cur_start; $best_end = $_; } elsif ($cur < 0) { $cur = 0; $cur_start = $_ + 1; } }