Template::Providerのオプション

少々はまったのでメモ。

Template::Providerのサブクラスを使用する場合のオプションに指定方法について。
(この辺の人たち。)

はじめはてっきり

use Template::MyProvider; # Template::Providerのサブクラス

my %tt_opt = (
    ABSOLUTE    => 1,
    COMPILE_DIR => '/tmp/tt_compile_normal/',
    LOAD_TEMPLATES => [Template::MyProvider->new()],
);
Template->new(%tt_opt)->process('/tmp/tt/hoge.html', { msg => 'hello world!' }, \my $out) or die;
print $out;

でいくだろうと思ったんですが設定してる(つもり)はずなのにABSOLUTEのエラーが発生しました。

で、よくよく中を見ると。

use Template::MyProvider; # Template::Providerのサブクラス

my %tt_opt = (
    LOAD_TEMPLATES => [Template::MyProvider->new(
        ABSOLUTE    => 1,
        COMPILE_DIR => '/tmp/tt_compile_normal/',
    )]
);
Template->new(%tt_opt)->process('/tmp/tt/hoge.html', { msg => 'hello world!' }, \my $out) or die;
print $out;

こう書かないといけなかったようです。
MyProviderのオプションとしてオプションを渡さないといけなかったと。

Template::Provider系のモジュールのSYNOPSISは大体

my $tt = Template->new(LOAD_TEMPLATES => [Template::Provider::モジュール名->new()]);

という形で書かれていたので気付くまで若干時間を食ってしまいました。


というお話でした。