I think people are still thinking that the second undef warning
is due the hash *value* not existing; its not. Both warnings are being generated by trying to evaluate the *key*. In the first foo() call in the OP, the key isn't undef, so it doesn't generate any warnings.
Dave.
Comment on Re^3: Inconsistency of 'Use of uninitialized value in scalar assignment' warning