If you iterate through the hash with each(), you can delete the key most recently returned without worrying about it. If you delete or add other keys, the iterator may skip or double up on them since perl may rearrange the hash table. See the entry for each() in perlfunc.
Re: Stepping through a hash while modifiying its content
OK, thank you for confirming my suspicions, and pointing out the documentation that covers this. I can probably get away with only deleting the most recently returned entry, and not the second entry I reference,though with some considerable increase in runtime.