#! perl use strict; use warnings; use Data::Dumper; my %main_hash = ( keyA => [ { keya => 'vala' }, { keyb => 'valb' }, { keyc => 'valc' }, { keyd => 'vald' }, ], keyB => [ { keye => 'vale' }, { keyf => 'valf' }, { keyg => 'valg' }, { keyh => 'valh' }, ], keyC => [ { keyi => 'vali' }, { keyj => 'valj' }, ], ); print Dumper(%main_hash), "\n"; foreach my $k (sort keys %main_hash) { my @array = @{ $main_hash{$k} }; foreach my $i (1 .. $#array) { my %inner_hash_first = %{ $array[$i - 1] }; my %inner_hash_next = %{ $array[$i ] }; my ($first_key, $first_val) = each( %inner_hash_first ); my ($next_key, $next_val) = each( %inner_hash_next ); print "Now compare ($first_key : $first_val) with ($next_key : $next_val)\n"; } }