They values are guaranteed to be of the same type, wherever a collision can happen ( namely scalar ). This is specific to my problem, so I need not worry about different types. Both hashes have the same structure, just here and there some values are missing from one or the other. If there is a collision the value to overwrite is always a scalar.