And a variation on that, which handles duplicate values within the arrays as well:
$_{$_} .= 'a' for @foo;
$_{$_} .= 'b' for @bar;
# $_{$key} =~ /ab/ iff $key was in @foo and @bar
# /a$/ iff $key was only in @foo
# /^b/ iff $key was only in @bar
# number of occurrences in
# $foo_plus_bar = length($_{$key});
# $foo_only = ( $_{$key} =~ tr/a// );
# $bar_only = ( $_{$key} =~ tr/b// );
Adapting that to handle up to 26 arrays is trivial -- just set a scalar to 'a' for the first array, and increment it for each successive array; using a regex to determine the distribution for a given array value is left as an exercise...
(I updated the last three comment lines to be more consistent with the first three comment lines.)