What you are seeing is right. Your conclusions are wrong. Once perl allocates memory form the OS, it's unlikely to give it back to the OS. Sure, if a hash goes out of scope, its memory is reclaimed. By perl. Kept in reserve, so the next time perl needs memory, it's already there.
Note that this behaviour is typical for (Unix) processes. Most "freed" memory isn't given back to the OS until the process terminates.