in reply to A strict CGI parser?

Well, the following lines at the start and end of your subroutine would do:
my ($in, @in, %in); # stuff here return \%in; # or %in, as you prefer
You'll get back either a reference to a hash of keys and values or a copied list made from the hash, depending on if you return a reference or the hash.

You could also declare %in as a global variable at the top of this script with use vars qw( %in );. You can keep the internal my declaration of $in and @in, as they don't appear to be used outside your subroutine.

Of course, CGI.pm has been included in the standard distribution of Perl since 5.004. If you're regularly working on servers with older installations than that, it's time for their owners to upgrade. The current release is two minor versions higher, with lots of bug and security and feature fixes I'm sure you already know about. :)