First- Did you include -w or use warnings?
These catch a huge number of problems:
Typos in variable names
Redefined subroutines
Using uninitialized variables as if they were initialized
Statements simply parsing in a way different than you expected
warnings definitely make code easier to debug.
Further explanation of the diagnostic messages with use diagnoistics;