To make the parsing simpler (and therefore faster) there are certain
restrictions in what this module can do:

o

One cannot escape { } [ or ] characters. However, the substitution
is clever enough so that you may be able to use them inside conditional
constructs, provided the use does not resemble a variable.

For example, to get a value surrounded by {}, the following
will not work:

{{$Var1}}

However, this will:

{?Var1 {[$Var1]}}

o

One cannot have nested variables.

o

Conditionals are limited to testing whether or not the variable
has a value. If you want more elaborate tests, or tests on more
than one value, youll have to write a function to do it, and
use the {&function()} construct.

o

Function arguments (as given with the {&funcname(arg1,arg2...)} format)
cannot have commas in them, since commas are used to separate the
arguments.

When I was writing SQLite::Work, I originally tried using Text::Template
(my favourite template engine) and also tried Text::FillIn. Both
of them had some lovely, powerful features. Unfortunately, they were
also relatively slow. In testing them with a 700-row table, using
Text::Template took about 15 seconds to generate the report, and using
Text::FillIn took 45 seconds! Rolling my own very simple template
engine cut the time down to about 7 seconds.

The reasons for this arent that surprising. Because Text::Template
is basically an embedded Perl engine, it has to run the interpreter
on each substitution. And Text::FillIn has a lot to do, what with being
very generic and very recursive.

The trade-off for the speed-gain of Text::NeatTemplate is that
it is quite simple. There is no nesting or recursion, there are
no loops. But I do think Ive managed to grab some of the nicer features
of other template engines, such as limited conditionals, and formatting,
and, the most powerful of all, calling external functions.

This is a middleweight engine rather than a lightweight one, because
I needed more than just simple variable substitution, such as one
has with Template::Trivial. I consider the trade-off worth it,
and others might also, so I made this a separate module.

The show_names is a hash saying which of these variable names
ought to be displayed, and which suppressed. This can be useful
if you want to use a more generic template, and then dynamically
suppress certain values at runtime.