for my $k ( keys %harry ) { my $a1 = $harry{$k}; my $a2 = $harry{$phash{$k}}; my %delete_a1; my %delete_a2; OUTER: for $i1 ( 0 .. $#$a1 ) { #next if $delete_a1{$i1}; # Never true. for $i2 ( 0 .. $#$a2 ) { next if $delete_a2{$i2}; next if $a1->[$i1] ne $a2->[$i2]; $delete_a1{$i1} = 1; $delete_a2{$i2} = 1; next OUTER; } } @$a1 = map $a1->[$_], grep !$delete_a1{$_}, 0..$#$a1; @$a2 = map $a2->[$_], grep !$delete_a2{$_}, 0..$#$a2; }