in reply to What is the best approach?

It is going to be a database driven interactive site, and if possible I would prefer the database to be xml based.
Hmm, what do you mean, that the database is an XML file? That won't be too speedy...
Im not anticipating having to store more than a few megabytes of user data as this is going to be a highly specialised service.
"A few megabytes" is, IMO, already too much for an XML file.
should I use mod perl?
Duh? First you make it dead slow by abusing an XML file as a "database", and then you'll use mod_perl to speed up the startup time??

My recommendations, since you asked:

  1. Don't use an XML file as a database. You can use SQLite, if you want to have a file as a database and yet have a very low startup overhead. Or, if installing is a bit of a problem (while all you need to do is to compile the module, it contains the database engine), perhaps a Pure Perl module like DBM::Deep will appeal to you.
  2. Don't start with mod_perl if it's your first time. Do it in CGI first. When you're happy with its functionality and it needs just a little bit of improvement on startup speed, then you can port it to mod_perl, or fast_cgi, or something else in that vain... You'll be happy to find that your code probably won't need too many changes, if you've done it right. By the time you get there, mod_perlite might already actually be usable for production.
  3. Like others said: use templates for the HTML, let your app just drive it and provide the data to fill in. Template Toolkit, HTML::Template... pick your favourite.

    But don't generate raw HTML in your code.