Two important pieces of advice.
The first is to pick an
indentation style indenting between 2-4 spaces, and then
start using it. Now. Running your code through
perltidy will show
you what it looks like.
The second is to call functions with explicit parameters.
That means using parens. As documented in perlsub, if you
use just the plain & and in
a function you call another function, that other function
will get the parameters to the first as arguments.
Believe me. You may think these are picky details. But
they are not. The first strongly impacts how easy it is
to pick out your logic at a glance. The second is causing
a subtle set of side-effects that may or may not be
intended which a maintainance programmer may or may not
know enough to notice.