Thats pretty much it really. Building the 'big-ass' string allows you to handle errors and exceptions somewhat more easily but the truth of the matter is that if the application is anything more than trivial the why aren't you using HTML::Template? If you are spending that much time getting the data then you better look at your database design and the fetching process.
But of course I am a great advocate of the 'separationist' school of CGI writers.
Processing is processing and presentation is presentation, they don't mix well!
jdtoronto