in reply to CGI 'start_html' not printing opening <body> or <html>

You need to print the return values of those calls.
print $q->header(); print $q->start_html();
The same should hold true for end_html, I'm not sure why view source shows that output for you, when I run your source from the command line, I don't see the closing body or html tags.