in reply to use warnings => Use of uninitialized value...

I like to keep warnings on, because sometimes it is a bug when a variable is undefined, and I can't always rely on strict to tell me (for instance if I typo a hash key).

Other times I expect that a variable could be undefined. In those instances, I explicitly allow for that option:

if (defined($hash{key}) && $hash{key} =~ /\d+/) { ... }
Other times I will set the variable to a false but defined value, such as an empty string or zero. It depends upon the context; often false and undefined are logically interchangeable, but other times they are not (in the above example, 0 has a different meaning than undef).

It doesn't hurt to be explicit about your expectations; it can make things easier for the next person.