my @array1 = (1, 3, 4, 6); my @array2 = (1, 2, 4, 6); my @array3 = (1, 2, 3, 5); my %seen; my @union = grep { not $seen{$_}++ } (@array1, @array2); undef %seen; @union = grep { not $seen{$_}++ } (@union, @array3); print join(' ', @union); #### @array1 = (1, 2, 3, 4); @array2 = (1, 3, 2, 4);