【问题标题】:Simple Moose::Exporter example not working简单的 Moose::Exporter 示例不起作用
【发布时间】:2013-10-04 20:21:24
【问题描述】:

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

我做错了什么?

【问题讨论】:

    标签: perl moose


    【解决方案1】:

    Another 甚至从未尝试从 HasRw 导入 has_rw

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

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

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

    【讨论】:

    • 呃。我以为我理解 perl。那么最好的解决方案是什么?
    • 做你想做的事。是否需要单独的文件取决于您。
    【解决方案2】:

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

    我猜就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-01
      • 2015-11-23
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多