次の点を考慮してください。
package MyApp::CGI;
use Moose;
use MooseX::NonMoose;
use Data::Dumper;
extends 'CGI::Application';
BEGIN {
print "begin isa = " . Dumper \@MyApp::CGI::ISA;
};
print "runtime isa = " . Dumper \@MyApp::CGI::ISA;
...
これをコンパイルしたときの出力は次のとおりです。
begin isa = $VAR1 = [
'Moose::Object'
];
runtime isa = $VAR1 = [
'CGI::Application',
'Moose::Object'
];
なぜ私は気にするのですか?useCGI::Application::Plugin::* クラスを実行しようとするとCGI::Application、コンパイル時にすでに継承していると想定されるためです。add_callbackプラグイン クラスは、私のクラスのクラス メソッドとして呼び出そうとしますが、@ISAまだ設定されていないためできません。
これを解決する最善の方法は何ですか? @ISAブロックを手動で微調整BEGINすると干渉しMooseX::NonMooseますか?
編集
以下は機能しているように見えますが、不快だと思います。
package MyApp::CGI;
use Moose;
use MooseX::NonMoose;
use base 'CGI::Application';
extends 'CGI::Application';
これが良いアイデアかどうかを知るには、Moose の内部構造について十分に (または実際には何も) 知りません。