$VAR1 = { 'host' => { 'batch' => { 'run1' => { 'jobs' => { 'Job name 1' => { 'duration' => '16', 'end' => '2011/07/01 23:50:36', 'start' => '2011/07/01 23:50:19' }, 'Job name 2' => { 'duration' => '22', 'end' => '2011/07/02 05:22:29', 'start' => '2011/07/02 05:22:06' }, }, 'duration' => '25' 'end' => '2011/07/02 05:22:29', 'start' => '2011/07/02 05:22:06' }, 'run2' => { 'jobs' => { 'Job name 1' => { 'duration' => '16', 'end' => '2011/07/01 23:50:36', 'start' => '2011/07/01 23:50:19' }, 'Job name 2' => { 'duration' => '22', 'end' => '2011/07/02 05:22:29', 'start' => '2011/07/02 05:22:06' }, }, 'duration' => '25' 'end' => '2011/07/02 05:22:29', 'start' => '2011/07/02 05:22:06' }, }, }, }; #### %Hash -> $host -> $batch -> $run -> 'jobs' -> $jobname -> 'duration' -> 'duration' -> 'end' -> 'start' -> 'start' -> 'end' #### foreach $host ( keys %hash ) { foreach $batch ( keys %{$hash{$host}} ) { foreach $run ( keys %{$hash{$host}{$batch}} ) { #print $hash{$host}{$batch}{$run}{'duration'}, "\n"; print $hash{$host}{$batch}{$run}{'start'}, "\n"; #How do I sort by this? #print $hash{$host}{$batch}{$run}{'end'}, "\n"; foreach $job ( keys %{$hash{$host}{$batch}{$run}{'jobs'} ) { print $hash{$host}{$batch}{$run}{'jobs'}{$job}{'start'}, "\n"; #How do I sort by this? } } } }