my @all = 1..10; my @some = 1..5; my %h; my @c; @h{@some} = ( ); # Elements that exist in both arrays exists($h{$_}) and push @c, $_ for @all; # @c: 1 2 3 4 5 # Elements that do not exist in @some array exists($h{$_}) or push @c, $_ for @all; # @c: 6 7 8 9 10