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?
Output:#!/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__
.... is that really what you want?$VAR1 = { 'keyA' => { 'keyB' => '1234' }, 'keyC' => { 'keyB' => '5678' } }; $VAR1 = { 'keyB' => { 'keyC' => '5678', 'keyA' => '1234' } };
In reply to Re: inverting keys in a 2-D Hash
by 1nickt
in thread inverting keys in a 2-D Hash
by melmoth
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |