Alan Ferrency


Text::MicroMason::TemplateDir - Use Base Directory and Relative Paths


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

    use Text::MicroMason;
    my $mason = Text::MicroMason->new( -TemplateDir, template_root=>'/foo' );

Use the standard compile and execute methods to parse and evaluate templates:

  print $mason->compile( file=>$filepath )->( 'name'=>'Dave' );
  print $mason->execute( file=>$filepath, 'name'=>'Dave' );

Templates stored in files are looked up relative to the template root:

    print $mason->execute( file=>"includes/greeting.msn", 'name'=>'Charles');

When including other files into a template you can use relative paths:

    <& ../includes/greeting.msn, name => 'Alice' &>


This module changes the resolution of files passed to compile() and execute() to be relative to a base directory path or to the currently executing template.

Supported Attributes


Base directory from which to find templates.


Optional directory beyond which not to read files. If set to 1, uses template_root, Causes read_file to croak if any filename outside of the root is provided. (Note that this is not a chroot jail and only affects attempts to load a file as a template; for greater security see the chroot() builtin and Text::MicroMason::Safe.)

Private Methods


Intercepts uses of file templates and applies the base-path adjustment.


Intercepts file access to check for strict_root.


The following additional exceptions are generated by Text::MicroMason::TemplateDir when appropriate:

  • Text::MicroMason::TemplateDir: Strict root '%s' doesn't seem to exist

    The strict_root directory (or template_root if strict_root is '1') doesn't seem to exist. Strict root checking uses Cwd's abs_path(), and requires the strict_root directory to exist at the time the check is performed.

  • Text::MicroMason::TemplatePath: Template '%s' not in required base path '%s'

    The template found in the configured template path was not within the configured strict_root directory. This may be caused by requesting an absolute template filename not within strict_root, or by specifying a strict_root which does not match the configured template path.


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.