my %array2 = map(($_ => undef), @array2); my @delete; # Traverse array1 foreach (@array1) { exists $array2{$_} && push(@delete, $_); } my %array1 = map(($_ => undef), @array1); my @add; # Traverse array2 foreach (@array2) { exists $array1{$_} && push(@add, $_); }