use strict; use warnings; my @db = (1, 3, 5, 7, 9, 11); my @in = (1, 2, 5, 8, 9, 10, 13); my %lookup; my @result; @lookup{@in} = (); foreach my $elem (@db) { push(@result, $elem) unless exists $lookup{$elem}; } print "@result\n"; # should print 3 7 11.