简单的Moose :: Exporter示例不起作用

时间:2013-10-04 20:21:25

标签: perl moose

我正在尝试了解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由于编译错误而中止。

我做错了什么?

2 个答案:

答案 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;专门导入它似乎可以解决问题。

就是这样,我想。