use strict; use warnings; my @array1 = (1,2,3); my @array2 = (1,2,3,4,5); my %hash; @hash{@array1} = @array1; my @only2 = grep {! exists $hash{$_}} @array2; # remove the unwanted "value" @array1 = grep {$_ != 2} @array1; @array2 = grep {$_ != 2} @array2; push @array1, shift @only2; print "array 1:\n"; print "$_\n" for @array1; print "array 2:\n"; print "$_\n" for @array2;