in reply to using modules already 'used'
There are two options (aside from the one above) that i see off hand. First off, you could have a global cgi object, and have each module say somethine like if(ref $x ne CGI){%$x=new cgi;} Note that you must use this form, blah = new cgi unless.. doesnt work, it clobbers whatever was in the variable before.
The second option is to make your modules all take a cgi object as a parameter, then you can just keep passing the same obj around.