@pick @arr[@pick] 0 1 2 ==> x x x . . 0 1 3 ==> x x . x . 0 1 4 ==> x x . . x 0 2 3 ==> x . x x . 0 2 4 ==> x . x . x 0 3 4 ==> x . . x x 1 2 3 ==> . x x x . 1 2 4 ==> . x x . x 1 3 4 ==> . x . x x 2 3 4 ==> . . x x x #### return @$arr[ @pick = ( 0 .. $num - 1 ) ] unless @pick; #### my $i = $#pick; $i-- or return while ( $pick[$i]++ == @$arr - $num + $i ); #### @pick[$i .. $#pick] = $pick[$i] .. $#$arr;