Je dois lire un fichier dans la méthode BUILD et je veux utiliser la méthode de chargement du paquet MooseX :: Storage.
Mais cette méthode de chargement crée un nouvel objet et quand j'institue l'objet, ce n'est pas l'objet lu du fichier. Dans le code ci-dessous je crée un objet $ m1 avec l'état 2 pour écrire le fichier, je crée $ m2 sans paramètre pour lire le fichier mais $ m2 ne contient pas la bonne valeur. Le paquet:Moose: Charger l'objet du fichier dans la méthode BUILD
package mia;
use Moose;
use MooseX::Storage;
with Storage(format => 'JSON', io => 'File');
has 'nome' => (is => 'rw', isa => 'Str', default =>'',);
has 'stato' => (is => 'rw', isa => 'Int', default =>1,);
sub BUILD{
my $self=shift;
if ($self->stato==1){
$self=mia->load("mia.dat");
}
if ($self->stato==2){
$self->stato(0);
$self->nome("prova");
$self->store("mia.dat");
}
sub stampa(){
my $self=shift;
print $self->nome." ".$self->stato;
}
le programme principal
use mia;
my $m;
$m1=mia->new(stato=>2);
$m2=mia->new();
print "\nm1 \n";
$m1->stampa();
print "\nm2 \n";
$m2->stampa();
Vous pourriez vouloir reconsidérer votre nom package/classe. En Perl, la convention est que seuls les pragmas devraient avoir tous les noms en minuscules. Voir perlstyle-- http://perldoc.perl.org/perlstyle.html – daotoad