http://www.perlmonks.org?node_id=326891

ngomong has asked for the wisdom of the Perl Monks concerning the following question:

I'm looking for a way to join multiple arrays, but in a way that attempts to preserve the order of the elements. Here's what I mean:
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);
The output from this script is:
1 3 4 6 2 5

But, as you can see from my original arrays, 2 should come before 3, and 4 should come after 2. Is there a way to intelligently attempt to preserve the proper order of the elements? There will, of course, be data sets that can't be preserved, eg/
@array1 = (1, 2, 3, 4); @array2 = (1, 3, 2, 4);
... but the code should handle this gracefully and just choose one over the other.

Any ideas?

Thanks!
clay.