This is a somewhat obscure feature. Using both GET and POST fields is fairly uncommon, and in those instances you might want to keep the two types apart (e.g. to prevent parameter name conflicts). CGI.pm does this separation for you, even if you don't want it to. If you submit both GET and POST parameters, CGI.pm will make only the POST parameters available through its param
function. However, it doesn't throw away the GET params, it just makes you insist that you want them.
To that end, use the url_param function instead of param to fetch the GET values. The two functions work exactly the same way, except you can't set url_params.
See the MIXING POST AND URL PARAMETERS section of the CGI.pm POD for a bit more info.