Well, here are some debugging tips (note I did not test the code...). First, I only gave you a section of the code. I'm sure you can see that I didn't open the file yet, which obviously needs to be done. Also, it's a good idea to use strict at all times, and either use warnings if you're running perl 5.6 or later, or add the -w switch when running your script.
My personal favorite for monitoring data structures is to use Data::Dumper to view what's going on:
use Data::Dumper;
print Dumper(\%regions);
will give you output of what the %regions hash currently looks like.
HTH