I agree with Discipulus that #3 is the only sane choice for applications that are either large or likely to grow. I donít really recommend Template::Toolkit. This is not because I donít like it, I do, itís really wonderful, but itís so deep that it crosses the boundary of template engine and moves into mini-language. Itís also very slow compared to some of the alternatives, including Template::Alloy which can use Template::Toolkit syntax; so itís the way to go if you want that. Text::Xslate feels shallow by comparison but itís closer to the ideal of a view (only does presentation and the most basic logic/code and it is variable context ignorant which is kind of unPerly) and itís terribly fast. As far as that goes, speed in the template layer is not always a prime concern. Depends on the application. Both TT and TX cache templates for performance improvement too.
Update: typo fix, grazie mille, Discipulus.