次の点を考慮してください。
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'
];
なぜ私は気にするのですか?use
CGI::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 の内部構造について十分に (または実際には何も) 知りません。