One approach in the spirit of seperation of content and code is to collect your data (into one big hash, e.g.) by whatever means, then put all of your HTML-generating code in a sub (that may call other subs).
This half-way approach removes the need for a templating system, but segregates the HTML code from the business logic, somewhat alleviating the potential to break perl code while changing HTML.