---
name: "Template::Alloy::Compile"
section: "3pm"
platform: "linux"
package: "libtemplate-alloy-perl"
version: "1.022-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Template::Alloy::Compile"
---

# Template::Alloy::Compile(3pm)

Compile role - allows for compiling the AST to perl code

## 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@seamons.com\>

## LICENSE

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