in reply to Unexpected CGI param behavior

I think CGI implements this behavior so that param() can support both scalar and list context. In list context it returns all the values for a parameter and in scalar context it just returns the first value.

If it returned undef for unknown parameters, then this wouldn't work:

my @vals = $q->param('...'); print Dumper(\@vals); # would print [ undef ] not [ ]
That is, @vals would not be the empty list but a list containing undef.

A work-around is to use scalar:

my $var = { first => scalar $q->param('first'), second => scalar $q->param('second'), };