这是我无法弄清楚的奇怪之处。我有一个Moose类,我也想使用古老的标准Exporter模块导出一些常量。但是,一旦我将extends Exporter
添加到我的类中,由于某种原因,默认的Moose构造函数不再被继承,我得到了致命的错误:
Can't locate object method "new" via package "MyApp::Dispatch"
这是一个简单的测试,用来演示这个问题。
package Foo;
use Moose;
use constant NARF => 'poit';
extends 'Exporter';
1;
$ perl -I./lib -MFoo -e '$f=Foo->new'
Can't locate object method "new" via package "Foo" at -e line 1.
删除extends
行会导致问题消失。
这是使用Moose 0.93。
答案 0 :(得分:4)
假设您继承自另一个基于Moose的类,因此它不会从Moose :: Object继承。我不确定标准答案是什么:只需手动添加Moose :: Object或以某种方式使用MooseX :: NonMoose或其他东西。
但即使没有继承,出口商也能正常工作;只需导入其导入例程:
use Exporter "import";
答案 1 :(得分:2)
你已经得到了真正的答案,但真正的问题是你为什么有一个导出东西并且是对象的模块?这是一个非常奇怪的设计,可能是代码味道。