#! 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"; } } #### Now compare (keya : vala) with (keyb : valb) Now compare (keyb : valb) with (keyc : valc) Now compare (keyc : valc) with (keyd : vald) Now compare (keye : vale) with (keyf : valf) Now compare (keyf : valf) with (keyg : valg) Now compare (keyg : valg) with (keyh : valh) Now compare (keyi : vali) with (keyj : valj)