Template::Alloy::Compile.3pm

Langue: en

Autres versions - même langue

Version: 2008-09-17 (fedora - 01/12/10)

Section: 3 (Bibliothèques de fonctions)

NAME

Template::Alloy::Compile - Compile role - allows for compiling the AST to perl code

DESCRIPTION

The Template::Alloy::Compile role allows for taking the AST returned by the Parse role, and translating it into a perl code document. This is in contrast Template::Alloy::Play which executes the AST directly.

TODO

*
Translate compile_RAWPERL to actually output rather than calling play_RAWPERL.

ROLE METHODS

compile_tree
Takes an AST returned by parse_tree and translates it into perl code using functions stored in the $DIRECTIVES hashref.

A template that looked like the following:

     Foo
     [% GET foo %]
     [% GET bar %]
     Bar
 
 

would parse to the following perl code:

     # Generated by Template::Alloy::Compile v1.001 on Thu Jun  7 12:58:33 2007
     # From file /home/paul/bar.tt
 
     my $blocks = {};
     my $meta   = {};
     my $code   = sub {
         my ($self, $out_ref, $var) = @_;
 
         $$out_ref .= 'Foo';
 
         # "GET" Line 2 char 2 (chars 6 to 15)
         $var = $self->play_expr(['foo', 0]);
         $$out_ref .= defined($var) ? $var : $self->undefined_get(['foo', 0]);
 
         # "GET" Line 3 char 2 (chars 22 to 31)
         $var = $self->play_expr(['bar', 0]);
         $$out_ref .= defined($var) ? $var : $self->undefined_get(['bar', 0]);
 
         $$out_ref .= 'Bar';
 
         return 1;
     };
 
     {
         blocks => $blocks,
         meta   => $meta,
         code   => $code,
     };
 
 

As you can see the output is quite a bit more complex than the AST, but under mod_perl conditions, the perl will run faster than playing the AST each time.

compile_expr
Takes an AST variable or expression and returns perl code that can lookup the variable.

AUTHOR

Paul Seamons <paul at seamons dot com>

LICENSE

This module may be distributed under the same terms as Perl itself.