Catalyst::Plugin のベストプラクティス

http://d.hatena.ne.jp/tokuhirom/20080603/1212499955

にも書いてあるように、Catalyst::Plugin::* 以下のクラスに書いてあるメソッドはすべて $c から呼べるようになります。Catalyst のキモイ面のひとつですが、回避方法はあります。

package Catalyst::Plugin::Hoge;

use Moge;

sub func1() {
  Moge->func1();
}

sub func2() {
  Moge->func2();
}

sub func3() {
  Moge->func3();
}

1;

package Moge;

sub func1() {
  my $self = shift;
}

sub func2() {
  my $self = shift;
}

sub func3() {
  my $self = shift;
}

sub func4() {
}

sub _func5() {
}

sub _func6() {
}

1;

上記のように委譲を使えば、必要なメソッドだけ $c 経由で呼べるようになります。