use Algorithm::Combinatorics qw(subsets); use List::Util qw(sum); my @data = (5, -6, 8, 10, 12, 3, 10); my $iter = subsets(\@data); while (my $subset = $item->next) { if (sum(@$subset) == 21) { print "found a solution: @$subset\n" } }