in reply to How to splice out multiple entries from an array

This is a FAQ. The basic solution is to put the elements @arr2 in a hash and then use grep. (If you can arrange that @arr2 is a hash from the get go then you are one up on this.)
my %hash; @hash{@arr2}=(1) x @arr2; my @cleaned=grep !$hash{$_},@arr1;
The running time of this is N+M, ie the number of elements in both arrays summed together.

Here is the relevant FAQ (in fact it explains how to do array union, intersection, and difference, the above only does the difference.)

E:\Bin>perldoc -q "difference of two arrays" Found in E:\Perl\lib\pod\perlfaq4.pod How do I compute the difference of two arrays? How do I compute the + intersection of two arrays? Use a hash. Here's code to do both and more. It assumes th +at each element is unique in a given array: @union = @intersection = @difference = (); %count = (); foreach $element (@array1, @array2) { $count{$element} +++ } foreach $element (keys %count) { push @union, $element; push @{ $count{$element} > 1 ? \@intersection : \@ +difference }, $element; } Note that this is the *symmetric difference*, that is, all elements in either A or in B but not in both. Think of it +as an xor operation.
In future please try doing some rudimentary searching before asking a question. Especially for something simple like this. It almost certainly has been asked and answered time and again.

HTH

--- demerphq
The trick is to use Perls strengths, not its weaknesses -- Larry Wall