I'm also a fan of here documents, and sometimes of
embedded-code solutions such as Apache::eperl or
Apache::embperl. What I find easiest to do is to write up
the HTML with no code in it first (or ideally, have someone
else do that for me), and then stick in variables, etc.
later on. In order to keep the pages themselves clean
looking, I find it a good idea to separate functions into
a file or files that are then
required, and have only
variables and function calls within the HTML itself. It's
very straightforward, and the whole thing basically becomes
a template easily edittable by a non-coder.