in reply to -w in production environment

Regardless of whether or not you're using CGI.pm (that's none of my business) you should leave the warnings on anyway. It's going to catch other problems eventually and that's a Good Thing.

Lots of gratuitous errors in the log will cause people to ignore the log...So...

If you honestly expect a lot of blank fields, and the prospect of checking for defined-and-then-a-value makes you nauseous, just pre-cook them all with a defined value (like the empty string) before you use them:

for(keys %USER) { $USER{$_}="" unless defined $USER{$_}; }