foreach my $key ( keys %hash ) { while ( my ( $subkey, $value ) = each %{ $hash{$key} } ) { $hash{ $subkey }{ $key } = $value; } delete $hash{ $key }; } #### #!/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__ #### $VAR1 = { 'keyA' => { 'keyB' => '1234' }, 'keyC' => { 'keyB' => '5678' } }; $VAR1 = { 'keyB' => { 'keyC' => '5678', 'keyA' => '1234' } };