in reply to Modifying hash keys via the control variable

keys returns a list of strings, not aliases to the real hash keys. Imagine an array instead of a hash - would you expect the following to work?
# Simulate shift. (Does NOT work!) for my $i (1 .. $#array) { $i--; }

To "change" a hash key, you have to delete it and create a new one:

$hash{newkey} = delete $hash{oldkey};
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ