printf "weight:%d intensity: %d filename: %s\n", $hoh{ $_->[ 0 ] }{ $_->[ 1 ]}{ weight }, $hoh{ $_->[ 0 ] }{ $_->[ 1 ]}{ intensity }, $_->[ 0 ] for sort{ $hoh{ $a->[0] }{ $a->[1] }{weight} <=> $hoh{ $b->[0] }{ $b->[1] }{weight} } map{ my $hash = $_; map{ [ $hash, $_ ] } keys %{ $hoh{ $_ } } } keys %hoh;; weight:1000 intensity: 4 filename: FILENAME3 weight:2000 intensity: 7 filename: FILENAME2 weight:3000 intensity: 2 filename: FILENAME1 weight:4000 intensity: 3 filename: FILENAME1 weight:5000 intensity: 3 filename: FILENAME2 weight:6000 intensity: 3 filename: FILENAME3