From perldoc -f each we read:
There is a single iterator for each hash, shared by all
each
,keys
, andvalues
each is not only worth using, it's pretty much mandatory if you want to loop over all of a tied hash too big for memory.
A void-context keys() (or values, but consistency is nice) before beginning the loop is the only "workaround" necessary; is there some reason you are looking for some other workaround?