0

我正在尝试理解 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 的执行被中止。

我究竟做错了什么?

4

2 回答 2

3

另一个甚至从未尝试has_rwHasRw导入。

如果这样做,则必须在has_rw编译调用之前这样做,因此必须在编译时完成。不要忘记,Moose::Exporter->setup_import_methods甚至在那之前就必须执行!

使用use为您完成了这一切。的内联等效项use HasRw;

BEGIN {
   package HasRw;
   ...
   $INC{'HasRw.pm'} = 1;
}

use HasRw;
于 2013-10-05T04:54:08.570 回答
0

移动HasRw到另一个文件HasRw.pm并专门使用它来导入它use HasRw;似乎可以解决这个问题。

就是这样,我猜。

于 2013-10-04T20:25:11.967 回答