while (my ($key, $value) = each (%$components)) { $OUT .= "\nProject #: $key\n"; while (my ($sub_key, $sub_value) = each (%$value)) { $sub_key =~ s/_c$//; $sub_key =~ s/_/ /g; if (!defined $sub_value || $sub_value eq '') { $sub_value = "No data"; } $OUT .= "\t$sub_key: $sub_value\n"; } } ------ my $designers; while (my ($key, $value) = each (%$components)) { push @{ $designers->{ $value->{designer} }, $key; } foreach my $designer_names ( keys %{ designers } ) { foreach my $project ( @{ designer_names } ) { $key = $project; $value = $components->{$key}; $OUT .= "\nProject #: $key\n"; while (my ($sub_key, $sub_value) = each (%$value)) { $sub_key =~ s/_c$//; $sub_key =~ s/_/ /g; if (!defined $sub_value || $sub_value eq '') { $sub_value = "No data"; } $OUT .= "\t$sub_key: $sub_value\n"; } } }