use Integer::Partition qw(); use List::MoreUtils qw(uniq); my $i = Integer::Partition->new(6); my $n = 5; while (my $p = $i->next()) { do_whatever_with($p) if (@$p == $n) and (@$p == uniq @$p); }