#!/usr/local/bin/perl -w use strict; use Data::Dumper; my %old_hash = ( '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 %new_hash = ( '1.1.1.1' => 'nfs,0', # index change '200.4.4.4' => 'cifs,0', # IP change '200.0.4.2' => 'afp,1', # IP change '3.3.3.3' => 'nfs,1', # index change '5.5.5.5' => 'afp,0', '4.22.2.22' => 'afp,2', # new entry ); my %changes; foreach my $key ( keys %new_hash ) { $changes{$key} = $new_hash{$key} unless ( (exists $old_hash{$key}) && $new_hash{$key} eq $old_hash{$key} ); # gotta check for existence to quiet warnings. } print Dumper( \%changes );