#!/usr/bin/perl use strict; use warnings; use Sort::Key qw(ikeysort); my %hoh; $hoh{'FILENAME1'}{'A'}{'weight'}=3000; $hoh{'FILENAME1'}{'A'}{'intensity'}=2; $hoh{'FILENAME1'}{'B'}{'weight'}=4000; $hoh{'FILENAME1'}{'B'}{'intensity'}=3; $hoh{'FILENAME2'}{'D'}{'weight'}=2000; $hoh{'FILENAME2'}{'D'}{'intensity'}=7; $hoh{'FILENAME2'}{'C'}{'weight'}=5000; $hoh{'FILENAME2'}{'C'}{'intensity'}=3; $hoh{'FILENAME3'}{'C'}{'weight'}=1000; $hoh{'FILENAME3'}{'C'}{'intensity'}=4; $hoh{'FILENAME3'}{'A'}{'weight'}=6000; $hoh{'FILENAME3'}{'A'}{'intensity'}=3; # Create a list of sets # $set[0] = filename # $set[1] = letter # $set[2] = reference to the data for this filename-letter combination my @sets; for my $filename (keys %hoh) { push @sets, [$filename, $_,$hoh{$filename}{$_}] for keys %{$hoh{$filename}} } for my $set (ikeysort { $_->[2]{weight} } @sets) { my ($filename,$letter,$data) = @$set; my $weight = $data->{weight}; my $intensity = $data->{intensity}; printf "weight: %4d intensity: %d Filename: %s\n",$weight,$intensity,$filename; }