foreach $group_id (keys %data) { @temp = sort keys %{ $data{$group_id} }; $my_hoa{$group_id}{'ordered'} = [ @temp ]; } foreach $group_id (sort keys %my_hoa) { for $i (0 .. $#{ @{ $my_hoa{$group_id}{'ordered'} } }) { # output some stuff; } }