use strict;. It will give you an error and from that you will be able to see where you are accidentally changing a hash reference to a number.
Without
use strict; enabled, that number is interpreted as a new symbolic hash reference, which is not at all what you intend.