in reply to Cgi script executing twice

It's important to keep in mind that your script is doing two jobs. 1) showing the form, 2) processing the form. You could write two cgi, one that makes the form and one that processes it. Or you could write a static HTML form that submits to the cgi that processes the form. You're doing it the most popular way, but not necessarily the most intuitive way.

Oh, and regarding your 2nd header. It will show up as text in the HTML produced by the CGI. Remember all HTTP is text. Try opening a telnet session to a web server. You don't need to call start_html() if you already have a header and an opening <html> tag.