Text::FastTemplate v0.95 Robert Lehr November 2, 2001 bozzio@the-lehrs.com ################################################################################ Text::FastTemplate is yet another template module written in Perl. So why use this module instead of one of the other template modules? Well,it's... + ultra simple, both the template syntax and the API. + fast, by compiling templates into subs, we let perl do the real work. + lean, a single file with no external dependencies. + completely separates the presentation from the application logic. + comprehensive, does substitutions, includes, conditions and loops. + a class, i.e. it's object-oriented. SIMPLE: This template uses a C-preprocessor style syntax, which means that it is line-oriented. Anybody that is familiar with the C-preprocessor knows that its syntax is brain-dead simple. Unlike the C-preprocessor, this template provides syntax for a loop around a text block that you might want to repeat. FAST: Like some other template modules, this template module converts the template text into a subroutine and passes it to Perl's compiler. This compiled subroutine is then cached to perform the actual template processing and output. LEAN: Very little code comprises this module. There are also no typeglobs, which means no memory leaks. One of the reasons this was originally written was because a memory leak was discovered in one of the more popular template modules, one which happened to be my favourite, when used in Apache/mod_perl. OBJECT-ORIENTED: Since it is a class, it is easily extensible. One of my favourite applications of this module is to derive a Page class from it. The Page class overrides the output() method with its own output() method that passes some common macroes, such as a DATE or USER_ID string, with the original macroes to the parent class output(). ################################################################################ This module is most useful in Perl programs that use the same template several times during the lifetime of its execution, particularly a persistent process such as an Apache/mod_perl server (surprise!) or some other server/daemon. Why another template module? I can describe it best by explaining why it was ever written. We didn't want to write another template module. We set our criteria and looked for a module that would work for our project. We tried a couple of the popular modules but abandoned them. Why? HTML::Template ? pros: simple syntax, complete isolation of HTML from perl code cons: memory leak, slow HTML::Mason ? pros: nice component structure, fast cons: too easy to mix perl and HTML, too complex for lame HTML coder Text::Template ? pros: could make our own template syntax cons: too much overhead, too complex, meant too slow In the end, we wanted a template that was simple, fast and completely separated the text template from the perl code. We got it by using: + C-preprocessor line-oriented syntax (SIMPLICITY) + converting templates into perl subroutines and compiling and caching it (SPEED) Our design gave us two additional benefits that we didn't anticipate: + component-type flexibility, like Mason. + general text-template capability, i.e. it is not restricted to HTML. HTML::Template was my favourite web template module until I discovered the memory leak that is caused by the typeglobs during its output() method. That was just the clincher. The HTML-style syntax made it a hard-sell to the lead engineer for the project on which I discovered the memory-leak. Not to mention, I was trying to replace a template system that only did simple substitution; repetitive HTML code, such as table rows, was generated by HTML embedded in the application code. We had the worst of both worlds. So what's the problem? It should have been a shoe-in, right? That should have been the case. But that pre-existing, lame template system was fast, much faster than HTML::Template. So speed became a constraint as I searched for a replacement template module; I couldn't make the application slower than it already was. It had to be simple and fast. So, Text::FastTemplate is really HTML::Template rewritten to be _much_ faster, with a simpler macro syntax, without a memory-leak and useful for more than just web pages. ################################################################################ I certainly would appreciate any feedback from people that use it, including complaints, suggestions, patches or anything. Even people that don't use it are welcome to send comments. Thanks for using Text::FastTemplate and for your feedback. Cordially, Robert Lehr bozzio@the-lehrs.com ################################################################################ Legal information: Copyright (c) 2001 Robert Lehr. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Caveat emptor. Use this module at your own risk. I will accept no responsibility any loss of any kind that is the direct or indirect result of the use of this module. ################################################################################ $Rev$