次のように、ループの最中にそのhashを変更してしまうとき、
keys %hash は、ループ開始時の値のままで、変更されない、
と安心していいんですか。

my $hash= {abc => q(abc), def => q(def) };
foreach my $alph (keys %$hash) {
$hash->{q(A) . $alph}= $hash->{$alph};
}

それとも、my @hash_keys= keys %$hash; と確保してから
foreach alph (@hash_keys) {...} とループ回した方が安全でしょうか。