The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Text::MicroMason::TextTemplate - Alternate Syntax like Text::Template

SYNOPSIS

Text::Template provides a syntax to mix Perl into a text template:

  { my $hour = (localtime)[2];
    my $daypart = ( $hour > 11 ) ? 'afternoon' : 'morning'; 
  '' }
  Good { $daypart }, { $name }!

Instead of using this class directly, pass its name to be mixed in:

  use Text::MicroMason;
  my $mason = Text::MicroMason->new( -TextTemplate );

Use the execute method to parse and evalute a template:

  print $mason->execute( text=>$template, %arguments );

Or compile it into a subroutine, and evaluate repeatedly:

  $coderef = $mason->compile( text=>$template );
  print $coderef->(%arguments);

DESCRIPTION

This mixin class overrides several methods to allow MicroMason to emulate the template syntax and some of the other features of Text::Template.

Compatibility

This is not a drop-in replacement for Text::Template, as the Perl calling interface is quite different, but it should be able to process most existing templates without major changes.

This should allow current Text::Template users to take advantage of MicroMason's one-time compilation feature, which in theory could be faster than Text::Template's repeated evals for each expression. (No benchmarking yet.)

Contributed patches to more closely support the syntax of Text::Template documents would be welcomed by the author.

Template Syntax

The following elements are recognized by the TextTemplate lexer:

  • literal_text

    Anything not specifically parsed by the below rule is interpreted as literal text.

  • { perl_expr }

    A Perl expression to be interpolated into the result.

        Good { (localtime)[2]>11 ? 'afternoon' : 'morning' }.

    The block may span multiple lines and is scoped inside a "do" block, so it may contain multiple Perl statements and it need not end with a semicolon.

        Good { my $h = (localtime)[2]; $h > 11 ? 'afternoon' 
                                               : 'morning'  }.

    To make a block silent, use an empty string as the final expression in the block.

        { warn "Interpreting template"; '' }
        Hello there.

    Although the blocks are not in the same a lexical scope, you can use local variables defined in one block in another:

        { $phase = (localtime)[2]>11 ? 'afternoon' : 'morning'; '' }
        Good { $phrase }.

Argument Passing

Like Text::Template, this package clobbers a target namespace to pass in template arguments as package variables. For example, if you pass in an argument list of foo => 23, it will set the variable $foo in your package.

The strict pragma is disabled to facilitate these variable references.

Supported Attributes

package

Target package namespace.

Private Methods

prepare()

If a package has not been specified, this method generates a new package namespace to use only for compilation of a single template.

lex()

Lexer for matched braces - produces only text and expr tokens. Uses Text::Balanced.

assemble()

Modifies Perl subroutine to handle package and symbol table munging.

install_args_hash()

Performs symbol table munging to transfer the contents of an arguments hash into variables in a target namespace.

SEE ALSO

The interface being emulated is described in Text::Template.

For an overview of this templating framework, see Text::MicroMason.

This is a mixin class intended for use with Text::MicroMason::Base.

For distribution, installation, support, copyright and license information, see Text::MicroMason::Docs::ReadMe.