Catalystのstashをグローバル変数的に使うのは
基本的に古い時代の名残なんじゃあるまいか。
stash は local なグローバル変数として利用されているとおもうのですが、あれはあんまりよくないんじゃないかなーと感じている。
stash じゃなくて各オブジェクトに明示的に渡した方が幸せだとおもう。
たとえば、Catalyst本で使いまくっていたら先日「使うな危険」とラベリングされてjrockway涙目のC::C::BindLex。これはstashの中身はすべて(場合によっては複数のものを連続して/切り替えて使う)ビューの出力に使うデータである、という前提があるから成り立っている。
ビューのテンプレート設定とかもそう。古くさいC::V::TTではstash経由でテンプレを渡しているけど、新しいC::V::Templatedベースのものはstashなんぞ通さず、$c->view(...)->template('template')のような形で直接指定できるようになっている。
セッションとか認証まわりのデータも、本来出力用のデータではないから、stashには保存されない。
もちろんなかにはstashを自前のデータ置き場にしてしまっているプラグインやコンポーネントもあるけど、基本的にそういうのはベタープラクティスが定まる前の古いもの(か、そういうstash内の衝突とかを気にしていないもの)だから、よほどの理由でもなければいまさら使うには値しない。
――というくらいのしばりをかけて使う(「TT->processの2番目の引数」以外の使い方を許容しない)分には、stashはあまり問題にはならないんでないかしら。
もちろんプラグインが意味もなくstashに自分のデータを保存するのはよろしくないと思うけど、プラグインの場合はそれ以前の問題だしね。