http://qs1969.pair.com?node_id=212263


in reply to Diff on hashes

How about this?

#!/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_h +ash{$key} ); # gotta check for existence to quiet warnings. } print Dumper( \%changes );
Outputs:
:!./test.pl $VAR1 = { '4.22.2.22' => 'afp,2', '1.1.1.1' => 'nfs,0', '3.3.3.3' => 'nfs,1', '200.4.4.4' => 'cifs,0', '200.0.4.2' => 'afp,1' };
Let me know if you see anything that it would miss.

Replies are listed 'Best First'.
Re: Re: Diff on hashes
by hotshot (Prior) on Nov 13, 2002 at 15:23 UTC
    Thanks for your answer, it's working almost perfectly. the thing is that it don't detect entries that were deleted from the old hash, do you have any idea how to change your solution so it'll handle that too?

    Hotshot