in reply to -w in production environment

You didn't mention if you were using CGI.pm or not, but I'll assume that you are since most good Perl programmers use it. :)

&CGI::param should returned the undefined value only for those fields left blank by the user, a value of zero is not undefined, so I doubt fields filled with zero are causing a warning. To accomodate possible empty fields, check the value returned by param() and if it is not defined, assign an empty string or zero, whichever is appropriate. Something like:

$USER{coffee} = param('coffee') || 0;