我必须在 BUILD 方法中读取一个文件,并且我想使用 MooseX::Storage 包的加载方法。
但是这个加载方法会创建一个新对象,所以当我实例化该对象时,这不是从文件中读取的对象。在下面的代码中,我创建了一个状态为 2 的对象 $m1 来写入文件,我创建了没有参数的 $m2 来读取文件,但 $m2 不包含正确的值。包装:
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;
}
主程序
use mia;
my $m;
$m1=mia->new(stato=>2);
$m2=mia->new();
print "\nm1 \n";
$m1->stampa();
print "\nm2 \n";
$m2->stampa();