while (<>) { ... @fields = split ; #field[0] is the module. $entries{$region}{$fields[0]}{entry} = $fields[0] ; $entries{$region}{$fields[0]}{addr} = $fields[1] ; $entries{$region}{$fields[0]}{size} = $fields[2] ; $entries{$region}{$fields[0]}{type} = $fields[3] ; $entries{$region}{$fields[0]}{object} = $fields[5] ; ... } #### for my $region (keys %entries) { ... } #### for my $region (keys %entries) { for my $module (keys %{$entries{$region}}) { ... } } #### for my $size (sort {%{$entries{$region}{$a}{size}} <=> %{$entries{$region}{$b}{size}}} keys %{$entries{$region}}) { ... }