No, that won't do it. @QUERY_PARAM is apparently a package variable. Once you have CGI compiled and in memory, @QUERY_PARAM is set until explicitly reset or undefined.
Note in the subroutine, the CGI object $q goes out of scope (and would thus be destroyed) at either of the return statements. btrott has it right -- Jellybean is a persistent environment like PERLEX or mod_perl, but CGI doesn't know that. We have to give it a hand.
Okay, I was thinking @QUERY_PARAMS was getting reset from
the empty param() list somewhere in there, but that
doesn't seem to be the case.
I would use the $CGI::PERLEX setting, since all it does
it flag _reset_globals() to be called in the constructor
and is pretty much a "set it and forget it" thing.
Of course, 'undef @CGI::QUERY_PARAM' may be the only
method guaranteed to work with future versions.