The problem is that in populating %hash you string the tied hash out into a list and then copy that data into the new hash. But now you have a hash %hash which isn't tied.
The solution is to return the reference to the hash to a scalar like $h_ref and then do your lookups with: