in reply to Detect and reset hashes

It would help if you would post the code you're having trouble with.

In answer to your second question: If you are accessing specific entries in the hash, there is no need to reset anything. You can, for example, access $foo{'bar'} as many times as you wish, without any surprises.
On the other hand, if you're iterating over a hash using the each operator and you decide you want to start over before you've gone through all the entries, you can reset the iterator. This is detailed in the documentation of each.