my $measurements = { 'MeasurementA' => { 1 => { 'Date' => 'DateA', 'Value' => '1A', }, }, 'MeasurementB' => { 1 => { 'Date' => 'DateB', 'Value' => '3A', }, 2 => { 'Date' => 'DateD', 'Value' => '2A', }, 3 => { 'Date' => 'DateE', 'Value' => '5A', }, }, 'MeasurementC' => { 1 => { 'Date' => 'DateC', 'Value' => '3A', }, }, }; #### foreach my $measurement ( sort keys %{ $measurements } ) { print "Measurement: $measurement\n"; foreach my $try ( sort keys %{ $measurements->{ $measurement } } ) { print " Try: $try\n"; print " Date: $measurements->{ $measurement }->{ $try }->{'Date'}\n"; print " Value: $measurements->{ $measurement }->{ $try }->{'Value'}\n"; } } #### Measurement: MeasurementA Try: 1 Date: DateA Value: 1A Measurement: MeasurementB Try: 1 Date: DateB Value: 3A Try: 2 Date: DateD Value: 2A Try: 3 Date: DateE Value: 5A Measurement: MeasurementC Try: 1 Date: DateC Value: 3A #### foreach my $measurement ( sort keys %{ $measurements } ) { print "$measurement -- "; foreach my $try ( sort keys %{ $measurements->{ $measurement } } ) { print "$measurements->{ $measurement }->{ $try }->{'Date'}: $measurements->{ $measurement }->{ $try }->{'Value'} "; last if $try == scalar keys %{ $measurements->{ $measurement } }; print " -- "; } print "\n"; } #### MeasurementA -- DateA: 1A MeasurementB -- DateB: 3A -- DateD: 2A -- DateE: 5A MeasurementC -- DateC: 3A