in reply to Problem de-referencing a variable

my %reverse_translation = reverse %translation;

That won't work because the array references are converted to strings when they are stored as hash keys and once they are strings they cannot be converted back to array references.   You probably need to do something like this:

while ( my ( $key, $val ) = each %translation ) { print STDERR "$key\n"; # print join( ",", @$val ), "\n"; }