No, you misunderstood him (or he misunderstood you :) sort is applied to the list of of keys returned by keys (the keys returns list in random order). So your foreach loop shall iterate over sorted list of keys. You then use current key to obtain value from hash. If you shall access your hash only ones, then you can use this approach. If there are multiple accesses, then it makes sense to keep sorted list of keys to avoid sorting multiple times.
On a side note. Your code in the original message contains error. You use variable $keyHoA as iterator of the loop, but to access value of the hash inside of the loop you use variable $req ($newHoA{$req}[0])