は、次の点を考慮してください問題:: NonMooseクラス
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';
私は十分知っていない(または何かを、本当に):
は、以下の編集が動作しているように見えますが、私はそれが不快見つけます良い考え。
BEGIN {extends ...}。 – jrockway
(BEGINの同義語としての "use"は一般的な反パターンです。) – jrockway
jrockway:答えではなく、コメントでなければなりません。 – ysth