テンプレートファイル名を$c->stash->{template}に入れる必要は無い

久しぶりにCatalystのマニュアル見てたら

sub foo : Global { # called for /foo, /foo/1, /foo/1/2, etc.
    my ( $self, $c, @args ) = @_; # args are qw/1 2/ for /foo/1/2
    $c->stash->{template} = 'foo.tt'; # set the template

みたいな記述があって、「そう言えばテンプレートファイルはいちいち指定しないよなあ」と思ったので念の為書いとく。


$c->stash->{template}を指定しない場合、fooアクションでは"foo"というテンプレートが使用されます。defaultアクションやindexアクションの場合も同様に"default"や"index"というファイルが使用されます。

また、View::TTのconfigでTEMPLATE_EXTENSIONを例えば".tt"に設定しておけば、"foo.tt"というテンプレートが使われます。
↓この辺参照。

### Catalyst::View::TT#process
my $template = $c->stash->{template}
  ||  $c->action . $self->config->{TEMPLATE_EXTENSION};

自分はContent Negotiationとかページキャッシュの関係で、TEMPLATE_EXTENSIONは空文字列のままにしています。拡張子無い方がきれいだし。