I can't imagine doing this myself after so carefully constructing a hash to index my data, but, this will do what you want:
foreach my $key ( keys %hash ) {
while ( my ( $subkey, $value ) = each %{ $hash{$key} } ) {
$hash{ $subkey }{ $key } = $value;
}
delete $hash{ $key };
}
But what about when there are multiple occurrences of keyB in the original hash? Or multiple subkeys in the subhashes?
#!/usr/bin/perl
use strict;
use warnings;
use feature qw/ say /;
use Data::Dumper;
my %hash;
$hash{'keyA'}{'keyB'} = '1234';
$hash{'keyC'}{'keyB'} = '5678';
say Dumper \%hash;
foreach my $key ( keys %hash ) {
while ( my ( $subkey, $value ) = each %{ $hash{$key} } ) {
$hash{ $subkey }{ $key } = $value;
}
delete $hash{ $key };
}
say Dumper \%hash;
__END__
Output:
$VAR1 = {
'keyA' => {
'keyB' => '1234'
},
'keyC' => {
'keyB' => '5678'
}
};
$VAR1 = {
'keyB' => {
'keyC' => '5678',
'keyA' => '1234'
}
};
.... is that really what you want?
The way forward always starts with a minimal test.