#!/usr/bin/perl use warnings; use strict; use List::Util qw(sum); sub is_divisible { my $array = shift; my $sum = sum(@$array) / 2; for my $bitmask (1 .. 2 ** $#$array - 1) { return 1 if sum(map { $array->[$_] * vec $bitmask, $_, 1} 0 .. $#$array) == $sum; } return; } my @arrays = ( [qw(1 3 5 7)], [qw(1 3 8 4)], [qw(1 6 2)], [qw(5 5 4 6 2 8 1 9)], ); for my $array (@arrays) { print "@$array: ", is_divisible($array) ? 'yes' : 'no', "\n"; }