私はCatalystプラグインを介してあらゆる種類のグローバル状態を管理するのが好きです。理由:
- プラグインを使用すると、アクセサメソッドを介してデータを取得/設定できます。
- これにより、$ package::variablesを使用する際の安全上の問題の一部が回避されます。
- これにより、グローバル状態を使用するコードが、保存場所の詳細から切り離されます。
- プラグインは、そのグローバル状態に関連する可能性のある他の機能を配置するための便利な場所になります。
- Catalystプラグインは、驚くほど簡単に実装できます。
PACKAGE- >configを使用するというRETの提案に基づいたサンプル実装を次に示します。
package YourApp::Catalyst::Plugin::MyGlobalState;
sub global_state {
my $c = shift;
if(@_) { # If passed an argument, set.
$c->config->{global_state} = shift;
}
return $c->config->{global_state};
}
1;
次に、メインアプリで:
package YourApp;
use Catalyst (
...
'+YourApp::Catalyst::Plugin::GlobalState'
);
次に、どこかのコントローラーで:
sub my_action {
my $c = shift;
my $global_state = $c->global_state;
$c->global_state('new state');
}