use strict; use Data::Dumper; my %oldhash=( '1.1.1.1' => 'nfs,1', '4.4.4.4' => 'cifs,0', '10.0.4.2' => 'afp,1', '3.3.3.3' => 'nfs,0', '5.5.5.5' => 'afp,0', ); my %newhash=( '1.1.1.1' => 'nfs,1', '7.7.7.7' => 'cifs,0', '10.0.4.2' => 'afp,2', '3.3.3.3' => 'nfs,0', '5.5.5.5' => 'afp,0', '6.6.6.6' => 'cifs,1', ); foreach my $ip (keys %newhash) { if (exists($oldhash{$ip}) && $newhash{$ip} eq $oldhash{$ip}) { delete $oldhash{$ip}; delete $newhash{$ip}; } } print "Entries to remove:\n"; print Dumper(\%oldhash); print "Entries to add:\n"; print Dumper(\%newhash);