He juntado un poco de caso de prueba para demostrar mi problema:¿Cómo puede ser que MooseX :: Storage no siga los atributos de atributos para algunos objetos?
package P1;
use Moose;
use MooseX::Storage;
with Storage;
has 'blah' => (
is => 'rw',
);
package P2;
use Moose;
use MooseX::Storage;
with Storage;
has 'lol' => (
is => 'rw',
traits => ['DoNotSerialize']
);
package P3;
use Moose;
extends 'P2';
has 'magic' => (
is => 'rw',
);
package Test;
my $obj = P3->new(
magic => 'This ok!',
lol => sub { 'weee' }
);
my $stored = P1->new(blah => $obj);
use Data::Dumper; print Dumper ($stored->pack);
Yo esperaría esta opción para imprimir el objeto, pero no el 'lol' atributo en el paquete P2 - sin embargo, todavía puedo ver esto en el resultado de $stored->pack
$VAR1 = {
'__CLASS__' => 'P1',
'blah' => bless({
'magic' => 'This ok!',
'lol' => sub { "DUMMY" }
}, 'P3')
};
Estoy usando MooseX :: almacenamiento incorrecto, o se parece esto un comportamiento incorrecto?
Sé que esto es viejo, pero en realidad no parece ser un error. Como 'draegtun' señala, se echa en falta la información de tipo lo que el atributo 'bla' no es en realidad conseguir serializado por MooseX :: Almacenamiento en absoluto. Si se serializara, no verías la 'bendición', sino que verías la tecla '__CLASS__'. MooseX :: Storage hace la mayoría de colapsar en función de la restricción de tipo proporcionada en el atributo, sin que se deje adivinar. –