my (@a, @b); # initialize @a and @b here my %hash: @hash{@a} = (1) x @a; my @union = @a, grep { !$hash{$_} } @b; my @intersection = grep { $hash{$_} } @b;