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


in reply to Difference between two arrays - is there a better way?

This one-liner (versus answers with hashes and inspired by another answer) is working for me but has not been very rigorously tested (as run on AS Perl 5.16.3):

@foo = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); @bar = (0, 1, 2, 5, 7, 9, 11, 12, 13, 14); my @diff = grep {my $baz = $_; ! grep($_ == $baz, @bar)} @foo; print join(",", @diff); Gives: 3,4,6,8,10

Switch the lists around in the nested greps to go from being "in foo but not also bar" to "in bar but not also foo".

-Simon