in reply to Unexpected exists() behavior

Nope, supposed to work that way. Yup, can be surprising until you understand why.

See Looping through a hash reference is creating a key...? for a long discussion.