---
name: "Text::MicroMason::TemplateDir"
section: "3pm"
platform: "linux"
package: "libtext-micromason-perl"
version: "2.23-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Text::MicroMason::TemplateDir"
---

# Text::MicroMason::TemplateDir(3pm)

Use Base Directory and Relative Paths

## NAME

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

## SYNOPSIS

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' &>
```

## DESCRIPTION

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

- template\_root

  Base directory from which to find templates.

- strict\_root

  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

- prepare

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

- read\_file

  Intercepts file access to check for strict\_root.

### EXCEPTIONS

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.

## SEE ALSO

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.
