in reply to Don't want to have to use -w

From perldoc perlrun:

-w prints warnings about dubious constructs, such as variable names that are mentioned only once and scalar variables that are used before being set, redefined subroutines, references to undefined file­ handles or filehandles opened read-only that you are attempting to write on, values used as a number that doesn't look like numbers, using an array as though it were a scalar, if your subroutines recurse more than 100 deep, and innumerable other things. This switch really just enables the internal "^$W" variable. You can disable or promote into fatal errors specific warnings using "__WARN__" hooks, as described in the perlvar manpage and the warn entry in the perlfunc manpage. See also the perldiag man­ page and the perltrap manpage. A new, fine-grained warning facility is also available if you want to manipulate entire classes of warnings; see the warn­ ings manpage or the perllexwarn manpage.

Adding -w to your code should not affect whether or not your code runs; it should just give you a better idea why when it doesn't.

Another option is to use the use warnings pragma in your code.