I agree that the mixing of code can get ugly, and this is an hour's hack and not the way I'd generally do it, but I prefer to avoid the templating way of doing it. Calling templates and passing them values can be just as ugly as bare HTML and it removes you one step from what you're actually trying to do (which is communicate through web pages).
My preferred approach is object oriented. I create a "Display" object with subs for form generation, etc. that are specific to my current problem. If I can design the interfaces to these objects well enough, I can rewrite them later for Tk or whatever other kind of user display I'm using and not have to re-write the rest of the app. This provides cleanliness in the functional code and separation from the display code but still allows you to see the HTML directly when you want to.
So far I don't know anyone else who does it this way, but I prefer it.
-the Pedro Picasso
(sourceCode == freeSpeech)