Catalyst::Plugin::*の読み込み方(小ネタ)

普通に作るとプラグインの読み込み方は以下のようになります。

package MyApp;
use Catalyst qw/-Debug ConfigLoader Static::Simple/;
__PACKAGE__->setup;

でもこれだと条件によって読み込むプラグインを変えたい時は、その条件分岐をBEGINに突っ込んだりしなきゃいけなくなるので、以下のように書く方が良いです。

package MyApp;
use Catalyst;
__PACKAGE__->setup(qw/-Debug ConfigLoader Static::Simple/);

例えば、ちゃんとしたWebServerに静的コンテンツを配信させるからStatic::Simpleは不要だけど、テスト用にmyapp_server.plを使う場合はStatic::Simpleが欲しいなんて場合は

my @plugins = qw/-Debug ConfigLoader/;
if ( ( $ENV{CATALYST_ENGINE} || q{} ) =~ m/^HTTP(?:::Restarter)?$/msx ) {
    push @plugins, 'Static::Simple';
}
__PACKAGE__->setup(@plugins);

てな感じで書くわけです。

あと、-Debugをソース中に書いてしまうと常にデバッグモードになってしまうので、これを外して代わりに$ENV{CATALYST_DEBUG}や$ENV{MYAPP_DEBUG}を設定する方が良いです。(myapp_server.plの場合は-dオプションで)
それからプラグインは先頭から順番に読み込まれるのでConfigLoaderは最初に持ってこないといけません。

まとめると、こんな感じのMyApp.pmになります。

use Catalyst;

my @plugins = qw(
  ConfigLoader
);

push @plugins, qw(
  ...
);

if ( ( $ENV{CATALYST_ENGINE} || q{} ) =~ m/HTTP(?:::Restarter)?/msx ) {
    push @plugins, 'Static::Simple';
}

__PACKAGE__->setup(@plugins);