sub perms { my ($n, $min) = @_; $min //= 2; return [] if $n <= 0; return [$n] if $n <= $min; my @r; foreach my $i ($min .. $n) { my $left = $n - $i; next if $left < $min; my @p = perms $left, $i; foreach my $p (@p) { push @r, [@$p, $i]; } } @r; } say "[@$_"] for perms 7; __END__ [2 3 2] [3 4] [2 5]