choroba's Explore-all-possible-combinations mechanism works okay for smallish sets (max:32 or 64 depending upon your Perl), but will get very slow for anything much larger than 20 or so.

This will very quickly (less than 0.001 of a second) find a solution, if one exists, for sets of 100s or 1000s of elements. :

#! perl -slw
use strict;
use Time::HiRes qw[ time ];
use List::Util qw[ sum ];
sub partition {
my $sum = sum @_;
return if $sum & 1;
$sum /= 2;
my @s = sort{ $b <=> $a } @_;
my @a;
my( $t, $n ) = ( 0, -1 );
$t + $s[$n] <= $sum and $t+= $s[$n] and push @a, $n while ++$n < @
+s and $t <= $sum;
@a = delete @s[ @a ];
@s = grep defined, @s;
return unless sum( @a ) == sum( @s );
return \@a, \@s;
}
our $N //= 64;
my( $a, $b ) = partition 1,3,5,7;
print "sum( @{ $a } ) == sum( @{ $b } )" if $a;
my @set = map int( rand 100 ), 1 .. $N;
my $start = time;
( $a, $b ) = partition @set;
printf "Took %f seconds\n", time() - $start;
if( $a ) {
printf "(%u) == sum( @{ $a } ) == sum( @{ $b } )\n", sum @$a;
}
else {
print "No solution existed for the $N element set @set";
}