Catalyst::View::Tmplatedとstashの関係

Catalystのstashをグローバル変数的に使うのは - Charsbar::Note

ビューのテンプレート設定とかもそう。古くさいC::V::TTではstash経由でテンプレを渡しているけど、新しいC::V::Templated ベースのものはstashなんぞ通さず、$c->view(...)->template('template')のような形で直接指定できるようになっている。

これはいいですね。
jrockwayがC::M::Adaptorに続き、Viewまで汎用化してくれました。

で、C::V::Templatedとstashの関係ですが、ちらっとソースを見てみるとtemplateメソッドでテンプレートを渡すようになったけどstashを使ってないわけではないんですね。

templateメソッドの実装を見ると

$self->context->stash($self->_ident() => $template);

となってて、しっかりstashを使ってますが、stash名を決定する_identメソッドをのぞくと

sub _ident { # secret stash key for this template'
    return '__'. ref($_[0]). '_template';
}

となっているので、例えばMyApp::View::TTってパッケージで使うとstash名は

__MyApp::View::TT_template

ってなるので、普通はバッティングしないだろってことですね。
スコープ的には相変わらずグローバルっぽいけど名前規則でそれを回避してるわけですね。

っつーわけでControllerやViewでstashを使わざるを得ないんだったら、全部この方法にすればいいんじゃないだろか。