in reply to Why? (each...)

Because your first hash only contains one key, HASH(0x100804ed0). Had you used warnings, Perl would have told you so:

>perl -we "my %keys={A=>'b'};my ($a,$b); while (($a,$b)=each %keys) { +print qq($a $b\n); }" Reference found where even-sized list expected at -e line 1. ...

A hash is assigned a list, not a hash reference.