我正在尝试了解Moose :: Exporter,但无论我尝试什么,这个例子几乎与手册完全不同。
package HasRw;
use Moose;
use Moose::Exporter;
Moose::Exporter->setup_import_methods(
with_meta => ['has_rw'],
also=>'Moose');
sub has_rw {
my ( $meta, $name, %options ) = @_;
$meta->add_attribute(
$name,
is => 'rw',
%options,
);
}
1;
package Another;
use Moose;
has_rw 'foo';
package main;
my $ww = new Another(foo=>"bar");
这是在example.pl
文件中;当我尝试用perl运行它时,我收到了此错误消息
找到运算符期望在example.pl第23行附近的字符串 “has_rw'foo'”
(你需要预先声明has_rw?)语法错误在example.pl第23行,靠近“has_rw'foo'”
执行 example.pl由于编译错误而中止。
我做错了什么?
答案 0 :(得分:2)
另一个甚至从未尝试从 HasRw 导入has_rw
。
如果你这样做,必须在编译has_rw
的调用之前这样做,所以它必须在编译时完成。不要忘记在此之前必须执行Moose::Exporter->setup_import_methods
!
使用use
为您完成了所有这些。内联等效use HasRw;
是
BEGIN {
package HasRw;
...
$INC{'HasRw.pm'} = 1;
}
use HasRw;
答案 1 :(得分:0)
将HasRw
移至另一个文件HasRw.pm
并使用use HasRw;
专门导入它似乎可以解决问题。
就是这样,我想。