2013-10-04 2 views
0

J'essaie de comprendre Moose :: Exporter, mais peu importe ce que j'essaie, l'exemple presque aussi exactement du manuel ne fonctionne pas.Simple Moose :: Exporter exemple ne fonctionne pas

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"); 

Ceci est dans le fichier example.pl; lorsque je tente de l'exécuter avec perl, je reçu ce message d'erreur

chaîne trouvée où l'opérateur prévu à la ligne de example.pl 23, près de « has_rw « foo » »

(Avez-vous besoin de Prédéclarer has_rw?) erreur de syntaxe sur example.pl ligne 23, près de "has_rw 'foo'"

Exécution de exemple.pl annulé en raison d'erreurs de compilation.

Qu'est-ce que je fais mal?

Répondre

2

Une autre ne tente même d'importer has_rw de HasRw.

Si vous l'avez fait, il aurait fallu le faire avant que l'appel à has_rw ne soit compilé, donc cela devrait être fait au moment de la compilation. N'oubliez pas que Moose::Exporter->setup_import_methods devrait être exécuté avant même!

L'utilisation de use a fait tout cela pour vous. L'équivalent en ligne de use HasRw; est

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

use HasRw; 
+0

Ufff. Et je pensais comprendre perl. Quelle est la meilleure solution alors? –

+0

Celui qui fait ce que vous voulez. C'est à vous de décider si vous voulez un fichier séparé ou non. – ikegami

0

Déplacer HasRw vers un autre fichier HasRw.pm et l'importer spécifiquement en utilisant use HasRw; a semblé résoudre le problème.

Alors c'est tout, je suppose.