Its interesting that thread of discussion has been raised.... I have been using H::T for years - as a result, I have added most of these features to my own instance. Just this week I finished testing a new H::T::Bundle module which I was going to upload to CPAN,
Features in my instance:
- some bugs fixed
- support for "die_on_unset_params" which causes the output() to die if the programmer hasn't called param(somevar =>...) when 'somevar' exists in the template
- big performance enhancement in the output() phase
- recursive templates (at a performance hit)
- output() by reference
- TMPL_REQUIRE - like TMPL_INCLUDE but only once ala Perl 'require'.
- support for simple perl-array based loops
- the ability to sub-class and so hook-in to create new TMPL_xxx semantics
- dynamic loading of ESCAPE modules
- 'includes_debug' which matches the other debug modes.
- profiling support
- preliminary support for objects, aka some_obj.some_attr, without having to do this yourself
- support for "intrinsic_vars" such as '__type__' and '__filename__'
- '__even__' and '__outer__' (TMPL_UNLESS __odd__ just seems wrong...)
- updated the docs
- updated some of the test cases.
- utf8 safe
- support for automatic length param on loops
- more test cases for objects, as I'm not 100% sure I got everything.
- TMPL_LOOP support for non-hash rows.
- more test cases which covers the use-cases for reftype()
Via the H::T::Bundle sub-class I added:
- support for pre-written filters (about a dozen so far)
- <% somevar %> implemented as a filter
- sane H::T defaults, as I think global_vars and loop_context_vars should be the default
- Environmental variables in templates
A note regarding the "format" option - this could be implemented in a sub-class using a new keyword, as in <TMPL_STRING var format=blah"> and/or <TMPL_PRECISION var precision=blah>. ie: extending TMPL_VAR is possible, but given the hug number of possibilities, it might be easier to do something similar to <TMPL_CATGETS var> which is a implementation of the gnus catgets() call, but from within templates (or just use a real translation engine either via preprocessing or real-time ).