HTML::Template is a pretty easy method to template your application. You embed HTML'esque tags in your code
<TMPL_VAL NAME=CONTENT>, assign content to them
$tmpl->param(CONTENT=>$mycontent; then send the output to the browser
print $tmpl->output;
I dont completely abstract the html gen and the code completely as i find it easier (and quicker) to have a "sensible" mix of the two, which of course is subjective, but works well for me.
If you're going the whole maintaince angle on your designs, check out CGI::Application which is a good method to build structured web sites that are easy to maintain and add new functionality.