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

もう 1 つはHasRwhas_rwからインポートしようとさえしません。

もしそうなら、への呼び出し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 に答える