NAME
Text::MicroMason::TextTemplate - Alternate Syntax like Text::Template
SYNOPSIS
Text::Template provides a syntax to mix Perl into a text template:
{ my $name = $ARGS{name};
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
- resolve()
-
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 output 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::ReadMe.