sub invert { my $x = shift; my $y = {}; while (my ($key1, $value1) = each %$x) { while (my ($key2, $value2) = each %$value1) { $y->{$key2}{$key1} = $value2; } } return $y; }