You're declaring %row in a different block from where you push it, so the one being pushed is a global. Put
my %row in the same block as it is used. I recommend just after the
chomps.
Also, use strict; at the top of your code would alert you to such things (unless you've declared my %row outside of the foreach loop.
We're not really tightening our belts, it just feels that way because we're getting fatter.