2013-10-04 3 views
0

Я пытаюсь понять Moose :: Exporter, но независимо от того, что я пытаюсь, пример почти так же, как и в руководстве, не работает.Simple Moose :: Пример экспорта не работает

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“»

(вам нужно predeclare Do has_rw?) синтаксическая ошибка в строке example.pl 23, рядом с "has_rw 'foo'"

Выполнение example.pl отменено из-за ошибок компиляции.

Что я делаю неправильно?

ответ

2

Другой даже не пытается импортировать has_rw из HasRw.

Если вы это сделали, нужно было бы сделать это до вызова has_rw, поэтому его нужно было бы сделать во время компиляции. Не забывайте, что Moose::Exporter->setup_import_methods пришлось бы выполнить еще до этого!

Использование use все это для вас. Внутренний эквивалент use HasRw; составляет

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

use HasRw; 
+0

Ufff. И я думал, что понимаю perl. Какое же самое лучшее решение? –

+0

Это то, что делает то, что вы хотите. Это зависит от вас, хотите ли вы отдельный файл или нет. – ikegami

0

Перемещение HasRw в другой файл HasRw.pm и, в частности, импорт его с использованием use HasRw;, похоже, исправить проблему.

Так вот, я думаю.