I've poured over
CGI myself. Basically, that module is a horrible mess. That's ok for someone who wants to use it, as it's not only one of the few messes that work, but one of the even fewer than work well in practice. It's very robust at what it's supposed to do, ie providing all the information a CGI script needs about its surroundings. But internally it's such a thorough
mudball that I'm trying
to switch to CGI::Simple wherever I have the opportunity (especially as I never use the HTML generator functions of CGI.pm). Ideally, it would get as much use as
CGI and we could just as (more, even) confidently recommend it to people who write CGI scripts than we do for
CGI today.
Makeshifts last the longest.