You probably don't want to reverse any of the hashes (at least in the sense Perl uses that keyword), because that involves swapping keys and values. What you probably want to do is change the order of the keys in your multi-level hash.
Here is how you could swap the outer two layers:
use warnings;
use strict;
my $new_obj;
foreach my $outer_key (keys %$perl_obj)
{
foreach my $inner_key (keys %{$perl_obj->{$outer_key}})
{
$new_obj->{$inner_key}->{$outer_key} =
$perl_obj->{$outer_key}->{$inner_key};
}
}
use Data::Dumper;
print Dumper $new_obj;
Output:
$VAR1 = {
'142' => {
'Packet Loss to Source' => {
'161' => '0.000',
'162' => '0.000',
'141' => '0.000'
},
'Packet Loss to Destination' => {
'161' => '0.000',
'162' => '0.000',
'141' => '0.000'
},
...etc...
You could completely invert it like this:
my $new_obj;
foreach my $outer_key (keys %$perl_obj)
{
foreach my $inner_key (keys %{$perl_obj->{$outer_key}})
{
foreach my $innest_key (keys %{$perl_obj->{$outer_key}->{$inner_key}})
{
$new_obj->{$innest_key}->{$inner_key}->{$outer_key} =
$perl_obj->{$outer_key}->{$inner_key}->{$innest_key};
}
}
}
use Data::Dumper;
print Dumper $new_obj;