.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Template::Alloy::Compile 3pm" .TH Template::Alloy::Compile 3pm 2024-03-07 "perl v5.38.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME Template::Alloy::Compile \- Compile role \- allows for compiling the AST to perl code .SH DESCRIPTION .IX Header "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. .SH TODO .IX Header "TODO" .IP \(bu 4 Translate compile_RAWPERL to actually output rather than calling play_RAWPERL. .SH "ROLE METHODS" .IX Header "ROLE METHODS" .ie n .IP """compile_tree""" 4 .el .IP \f(CWcompile_tree\fR 4 .IX Item "compile_tree" Takes an AST returned by parse_tree and translates it into perl code using functions stored in the \f(CW$DIRECTIVES\fR hashref. .Sp A template that looked like the following: .Sp .Vb 4 \& Foo \& [% GET foo %] \& [% GET bar %] \& Bar .Ve .Sp would parse to the following perl code: .Sp .Vb 2 \& # 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 .= \*(AqFoo\*(Aq; \& \& # "GET" Line 2 char 2 (chars 6 to 15) \& $var = $self\->play_expr([\*(Aqfoo\*(Aq, 0]); \& $$out_ref .= defined($var) ? $var : $self\->undefined_get([\*(Aqfoo\*(Aq, 0]); \& \& # "GET" Line 3 char 2 (chars 22 to 31) \& $var = $self\->play_expr([\*(Aqbar\*(Aq, 0]); \& $$out_ref .= defined($var) ? $var : $self\->undefined_get([\*(Aqbar\*(Aq, 0]); \& \& $$out_ref .= \*(AqBar\*(Aq; \& \& return 1; \& }; \& \& { \& blocks => $blocks, \& meta => $meta, \& code => $code, \& }; .Ve .Sp 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. .ie n .IP """compile_expr""" 4 .el .IP \f(CWcompile_expr\fR 4 .IX Item "compile_expr" Takes an AST variable or expression and returns perl code that can lookup the variable. .SH AUTHOR .IX Header "AUTHOR" Paul Seamons .SH LICENSE .IX Header "LICENSE" This module may be distributed under the same terms as Perl itself.