in reply to check for undefined param name

and I've also read that it will return a null '' but I haven't gotten that to work either.

a null '' is actually undef, it equals to false, so

unless ($query->param('loc')) { # print error mesage or whatever. }
would work, but

if ($query->param('loc) eq '') { ... }

does not work...

you might want to take a look at What is truth? here at the monastery for an explanation of "truth" in perl, as there are many 'gotchas' in handling truth in perl ;) (for example, in the code above, if 0 was a valid value for the loc parameter, the code would print the error message, even if we didn't want that.)

hope this helps,

Replies are listed 'Best First'.
Re^2: check for undefined param name
by tadman (Prior) on Apr 02, 2002 at 23:12 UTC
    As was pointed out, it might be better to check using length instead of defined. Remember that zero is false, so a straight logic check will not tell you if it is supplied but zero. Consider:
    unless ($query->param('is_a_chicken')) # Fails on 0 { print "You must choose an option.<BR>\n"; }
    As your appropriate values might be 0 or 1, this is going to fail on a valid submission. Better to have:
    unless (length $query->param('is_a_chicken')) { print "You must choose an option.<BR>\n"; }
    Though length does tend to complain about being forced to deal with undefined strings. This will lead to the more verbose but equally more robust version:
    my $is_a_chicken = $query->param('is_a_chicken'); unless (defined ($is_a_chicken) && length ($is_a_chicken)) { print "You must choose an option.<BR>\n"; }
    Of course, if you were doing this sort of thing all the time you could make a quick helper method to do it quickly:
    sub provided { return defined($_[0]) && length ($_[0]); }
    Which would simplify as follows:
    unless (provided ($query->param('is_a_chicken')) { print "You must choose an option.<BR>\n"; }