c:\@Work\Perl>perl -wMstrict -le "use Test::More 'no_plan'; use Test::NoWarnings; ;; use List::MoreUtils qw(part); ;; sub ascending_runs { my $prev = $_[0]; my $i = 0; return part { ++$i if $_ < $prev; $prev = $_; $i; } @_; }; ;; VECTOR: for my $ar_vector ( [ [ 1..8, 3, 5, 6, 3, 8, 1, 7, 8 ], [ 1..8 ], [ 3, 5, 6 ], [ 3, 8 ], [ 1, 7, 8 ], ], [ [], ], [ [ 0 ], [ 0 ] ], [ [ 1 ], [ 1 ] ], [ [ -7 ], [ -7 ] ], [ [ 0, 7 ], [ 0, 7 ] ], [ [ 7, 0 ], [ 7 ], [ 0 ] ], [ [ -1, 0], [ -1, 0 ] ], [ [ 0, -1 ], [ 0 ], [ -1 ] ], ) { my ($ar_in, @expected) = @$ar_vector; is_deeply [ ascending_runs(@$ar_in) ], \@expected; } " ok 1 ok 2 ok 3 ok 4 ok 5 ok 6 ok 7 ok 8 ok 9 ok 10 - no warnings 1..10