Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

Include files using Text::Template and a closure

by crenz (Priest)
on Apr 26, 2005 at 21:40 UTC ( #451778=snippet: print w/replies, xml ) Need Help??

Text::Template is a nice and fast module if you need to create a few simple dynamic webpages. I recently used it for a project where I needed easy installation, and since Text::Template didn't require any other Perl modules than what is in the core, it came in very handy.

The documentation gives a simple example on how to include sub-templates. In my improved example, by using a closure, you can very comfortably inherit the parameters set for your current template in the templates you include.

I use this function to fill in templates:

sub _fill_in {
    my ($template, %params) = @_;

    $params{include} = sub {
        _fill_in(shift, %params, @_);
        return '';

    my $template = Text::Template->new(
        SOURCE => catfile($templates_path, "$template.tmpl"));
    $template->fill_in(HASH => \%params, OUTPUT => \*STDOUT);

Then, a template might look like this:

{include('_header', title => 'Page title')}
<p>Some text...</P>
Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://451778]
[Discipulus]: ?
[Discipulus]: him refusing the job?
marto waves
[Corion]: Hi marto, Discipulus, choroba!
[Corion]: Seems like I chose just the right day to do a half-day recovery yesterday. Today it's snowing again, instead of the sun shining, so that's a good day to be at the office again ;)

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2018-03-22 09:09 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (273 votes). Check out past polls.