考虑以下:
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 的内部结构知之甚少(或任何东西,真的),不知道这是否是个好主意。