in reply to finding values in an array that add up to a specific number

Note that you are trying to solve what is known as a knapsack problem. In general this can only be solved by an exhaustive search, and so the execution time increases exponentially with the size of the array.

As to your question, I'd do it with a recursive routine; in outline:

sub find { my ($want, $n, $elems) = @_; return if $n == 0; return if $want <= 0; for (0..$#$elems) { my $e = $elems->[$_]; if ($n == 1) { return $e if $e == $want; } else { my @f = find($want-$e, $n-1, [@$elems less $e]); return ($e, @f) if @f; } } return; } # get 57 from 2 numbers in the set @answer = find(57, 2, [1,3,7,11]);

Dave.