for (reverse 0 .. $#a) { splice @a, $_, 1 if condition($a[$_]); } #### @a = grep { ! condition($_) } @a; #### my (%a, %b); @a{@a} = (); @b{@b} = (); delete @a{@b}; delete @b{@a}; @a = keys %a; @b = keys %b; # or if order matters, # @a = grep {exists $a{$_}} @a; # @b = grep {exists $b{$_}} @b;