I thought I would use CGI on the (yet-to-be-written) server program but not on the client end. The client displays a series of drop-down boxes to collect user info and I didn't think it worthwhile to go into CGI's ability to do this.
While it certainly can be done, the priority here should probably be making the best value of your time. From that perspective, CGI was removed from CORE specifically because modern frameworks, such as marto's suggested Mojolicious::Lite, actually get you done faster for even simple projects than either hand-rolled or CGI-assisted web page development. A read through CGI::Alternatives is worth your time.
That said, I have on many occasions used either a heredoc or a DATA block to hold HTML or an HTML template.
#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.
You're right to want to avoid CGI for HTML generation, it's very clunky. If as you say this is yet to be written please consider Mojolicious::Lite rather than CGI. The learning curve is IMHO about equal, however learning the former will be more benificial to you.