Catalyst::View::TT::ForceUTF8に設定を握りつぶされる

あー。PadWalkerってそういうモジュールだったのか。
http://nyarla.net/blog/perl-tips4
これ使ったら@Catalyst::View::TT::ForceUTF8::PROVIDER_CONFIG_KEYSを書き換えられるじゃん。
色々終わったらPadWalker使って書き直そう。
package MyApp::View::TT;
use base 'Catalyst::View::TT::ForceUTF8';

というTTなViewで、

View::TT:
  START_TAG: '[\[<]%'
  END_TAG: '%[\]>]'

とかやっても設定が反映されない。

調べてみるとTemplate::Parserにまで設定が行き届いてなかった。どうもTemplate::ParserはTemplate::Provider生成時の引数を使って生成されているようなので、C::V::TT::ForceUTF8を見てみたら

  my %args = map  { ($_, $config->{$_})  }
             grep { exists $config->{$_} }
             @PROVIDER_CONFIG_KEYS;

  $class->config->{PROVIDERS} = [ {
    name => 'Encoding',
    args => \%args,
  }, ];

となっていて、@PROVIDER_CONFIG_KEYSに指定されているパラメータしか渡されないようになっていた。
Catalyst/View/TT/ForceUTF8.pmをいじって、@PROVIDER_CONFIG_KEYSにSTART_TAG,END_TAGを追加したら設定が反映されるようになったんだけど、ForceUTF8.pmをいじらずに済む方法を考え中。

考えた。
package MyApp::View::TT;

use base qw(Catalyst::View::TT::ForceUTF8);

my @PARSER_CONFIG_KEYS = qw(START_TAG END_TAG TAG_STYLE);
sub new {
    my $class = shift;
    my ( $c, $arguments ) = @_;
    my $self               = $class->SUPER::new(@_);
    foreach ( grep { exists $self->config->{$_} } @PARSER_CONFIG_KEYS ) {
        $self->config->{PROVIDERS}->[0]->{args}->{$_} = $self->config->{$_};
    }
    return $self;
}
DUMP_CONFIG=>1のときに正しいログが出ないけどまあいいや。めんどくさい