| TipJar-Template-fill documentation | view source | Contained in the TipJar-Template-fill distribution. |
TipJar::Template::fill - interpolate data into templates with a minimum of fuss
Define a function that fills templates from a hash in our scope
use strict; # optional
our %fill;
use TipJar::Template::fill
;
%fill = ... # some code to load variables into %fill
print fill( <<EOTEM);
Dear [HONORIFIC] [FIRSTNAME] [LASTNAME],
About your issue numbered [ISSUENUMBER] in our tracking system,
[ISSUEDESCR]
We have reached the following conclusion:
[RESOLUTIONTEXT]
Thanks for choosing [COMPANYNAME]
Have a [DAYTYPE] day.
EOTEM
Some templates use a different syntax for their variables, and keep them in hashes with names different than you want for the filling function.
my %Tvar;
use TipJar::Template::fill
fill => fillXML,
hashref => \%Tvar, # this will be the default data source for fillXML(),
# instead of %fillXML
regex => qr{<tvar name="([^"]*)"\s*/>};
And some of our templates take their data from alternate sources
use TipJar::Template::fill;
$fill{musicCDlist} =
join '</li><li>',
map {
fill($CDlist_item_template, $_)
}
@{
$dbh->selectall_arrayref(
'SELECT * FROM music',
{Slice => {}}
)
};
TipJar::Template::fill provides an interface to substitution-based filling of templates. That's all it does. Find and replace. No conditionals or looping constructs are provided.
TipJar::Template::fill takes all its configuration on its use line.
the fill argument specifies the name of the subroutine to export.
This argument defaults to 'fill'.
the hashref argument specifies the hash to find the data to interpolate
into the templates. When not specified, it defaults to a named package hash
in the calling package, with the name provided by the fill argument.
the regex argument is either a string or a precompiled regular expression
that identifes the variable in the template and captures the variables name.
The default is suitable for interpolating variables appearing in templates in square brackets with names composed of [a-zA-Z0-9_].
by specifying a true _args argument, the behavior of a fill subroutine
can be changed on-the-fly, by modifying the %fill_args (or whatever you have
fill set to) hash in your package. There is a slight performance penalty for
using this feature.
TipJar::Template::fill exports one subroutine, called fill by
default, that takes one or two arguments. The first argument
is the template to be filled, and the second, when provided, is
a reference to a hash from which to pull the replacement variables.
The name can be set by specifying
a fill use-time argument. It is thus possible to
associate different target regular expressions and different
variable sources with differently named fill subroutines.
when a use-time argument called '_args' is provided a true value, the resulting fill subroutine will respond to changes made in a %fill_args hash that is exported to the caller's name space, with 'fill' replaced with whatever the fill argument was set to, in case you want to change your interpolation regex on-the-fly, or change the default data source on-the-fly without creating a new fill subroutine.
By default, the regex and the default data source do not change.
There's a TipJar::Template::fill::makesub subroutine, that takes two arguments, a regular expression and a hash reference, and provides an anonymous fill subroutine. If you are of an object-oriented bent, you could consider it the constructor.
A very nice article comparing popular templating systems is available at http://perl.apache.org/docs/tutorials/tmpl/comparison/comparison.html
Beginners to Perl may not be comfortable with regular expression writing. Perrin Harkins throws away writing a substitution expression at the beginning of his article as something that authors of templating systems start with, yet novice Perl coders who just want data interpolation but are not comfortable with the nuances of Perl's substitution operator are at this time presented with an abundance of object-oriented systems that do far more than they need.
TipJar::Template::fill abstracts repeated similar and visually busy substitution commands into a one-word subroutine. So you don't have to.
Copyright (C) 2005 by David L. Nicol
This library is free software; you may redistribute and/or modify it under the same terms as Perl.
TipJar is a service mark of TipJar LLC, a limited liability corporation registered in Missouri, USA, that has been providing practical infrastructure since 1996.
| TipJar-Template-fill documentation | view source | Contained in the TipJar-Template-fill distribution. |