$VAR1 = { 'FOO' => { 'TABLE_NAME' => 'FOO', 'TABLE_TYPE' => 'REFERENCE' }, 'BAR' => { 'TABLE_NAME' => 'BAR', 'TABLE_TYPE' => 'REFERENCE' }, 'BAZ' => { 'TABLE_NAME' => 'BAZ', 'TABLE_TYPE' => 'CUSTOMER' } }; #### $VAR1 = { 'REFERENCE' => [ 'FOO', 'BAR' ], 'CUSTOMER' => 'BAZ' }; #### my %HoA; foreach my $key (keys %$ref_to_HoH){ my $type = $ref_to_HoH->{$key}->{TABLE_TYPE}; if (exists $HoA{$type}){ push @{$HoA{$type}},$key; }else { $HoA{$type} = $key; } } #### Can't use string ("FOO") as an ARRAY ref while "strict refs" in use at .....