%UID_PATH = ("$USER" => "$UID")
creates a new hash, meaning that anything that existed before in %UID_PATH is wiped out. This syntax is OK to give initial values to a hash, but should not be used for anything else, expecially not for feeding new key/value pairs into the hash. For that, use the other syntax that you showed:
(or whatever it was exactly)...
BTW, I would recommend against using upper case letters for variable names, it is a pain in the neck to type them, although I must admit it is largely a matter of personal taste. The most common practice is to have lower case letters for variables and functions, Title Case for package names, UPPER CASE for constants (and, often files handles and dir handles).