http://www.perlmonks.org?node_id=105333

Tuna has asked for the wisdom of the Perl Monks concerning the following question:

I need to compare the contents of two HoH. Each hash represents files from a local cluster of machines and files in a remote cluster of machines. The code below correctly populates them both, but I don't know how to access each element for comparison.

What I mean by comparison is each hash must contain the same keys and key values.

#!/usr/bin/perl -w use strict; use Digest::MD5; use Data::Dumper; my(%localDigest, %remoteDigest ); my ($file, $md5, $digest, $key, $clusterHost); my @files = (@ARGV); my @hosts = ("Maleah", "Austin"); foreach $clusterHost(@hosts) { foreach $file(@files) { open(FILE, $file) or die "Can't open '$file': $!"; binmode(FILE); $md5 = Digest::MD5->new; while (<FILE>) { $md5->add($_); $digest = $md5->hexdigest; $localDigest{$clusterHost}{$file} = $digest; $remoteDigest{$clusterHost}{$file} = $digest; } close(FILE); } } print Dumper (%localDigest,%remoteDigest );

Specifically, what I need to compare is, ie:

%localDigest $VAR1 = 'Austin'; $VAR2 = { './gen-checksum.pl' => 'ad65a01b783248a21fcea95979a265a0', '/etc/passwd' => 'c978c29a59ba0138e5ed0ca325f7ec1e' }; $VAR3 = 'Maleah'; $VAR4 = { './gen-checksum.pl' => 'ad65a01b783248a21fcea95979a265a0', '/etc/passwd' => 'c978c29a59ba0138e5ed0ca325f7ec1e' };
equals
%remoteDigest $VAR5 = 'Austin'; $VAR6 = { './gen-checksum.pl' => 'ad65a01b783248a21fcea95979a265a0', '/etc/passwd' => 'c978c29a59ba0138e5ed0ca325f7ec1e' }; $VAR7 = 'Maleah'; $VAR8 = { './gen-checksum.pl' => 'ad65a01b783248a21fcea95979a265a0', '/etc/passwd' => 'c978c29a59ba0138e5ed0ca325f7ec1e' };

Thanks, once again,
Steve