I like davorg's explanation. I also tend to do use CGI qw(param header); and such often, or even fully qualify it all, use CGI (); print CGI::header(...). I've written hundreds of CGIs and I've never once started a CGI with the object interface (though I've coded with it in other hackers' scripts). It's extra typing and unless you actually need to pass an object around, like to a templating system or something (I've never had to because Template::Toolkit has a built-in interface to CGI.pm), it's always struck me as a little pointless and really kind of weird.