北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

TTと相対PATH

TTにテンプレートを相対PATHで渡したら、「file error - ./XXXX.tt: relative paths are not allowed (set RELATIVE option)」なんて怒られたわけです。

Template/Provider.pm によると、以下のような感じになってます。

our $RELATIVE_PATH = qr[(?:^|/)\.+/];

... 中略 ...

    elsif ($name =~ m/$RELATIVE_PATH/o) {
        # anything starting "./" is relative to cwd, allowed if RELATIVE set
        ($data, $error) = $self->{ RELATIVE }
            ? $self->_fetch($name)
            : $self->{ TOLERANT }
                ? (undef, Template::Constants::STATUS_DECLINED)
            : ("$name: relative paths are not allowed (set RELATIVE option)",
               Template::Constants::STATUS_ERROR);
    }

うは、こんな単純な正規表現で見てるわけですか。なので、ファイル名の頭から"./"を取ればOKです*1

ついでに、この部分のソースからTOLERANTオプションとか、TTでの内部のエラーの取り扱いとかが見えますね。Constants::STATUS_* にエラー状態が定義されていて、それを戻すことでエラーを通知しているようです。例外じゃないんですね〜。

*1:INCLUDE_PATH オプションで '.' を指定してあれば。