I agree that CGI.pm is generally not the best CGI module. But its main advantage is that comes pre-installed on the system because it is a core module.
I prefer to call that "standard module" and call modules that enable core functionality "core modules", like strict, warnings and File::Glob.
Anyway, it's not hard to deal with both, as interfaces are compatible:
# Fall back to CGI.pm if CGI::Simple is unavailable.
# We prefer CGI::Simple because it much lighter and faster.
my $cgi =
eval { require CGI::Simple; CGI::Simple->new }
|| do { require CGI; CGI ->new };
I do think avoiding CPAN modules is a bad idea.