in reply to storable $self
That's important, because you're doing nearly everything else right. Without seeing your code, I expect you may be doing something like this:my $object = Class->new(); my $self = \$object;
Unfortunately, since $self is declared as a lexical in the method and is shifted off of @_, the object is overwritten inside of the method with the restored code without updating the object itself.$object->restore(); sub restore { my $self = shift; $self = restore(); }
Possibly the best way around this is to return the new $self from the method. If you're concerned about interface purity, why not make a deserialization constructor? Another option is to take advantage of Perl's pass by reference semantics, operating directly on $_[0].
sub deserialize { my $class = shift; return $class->restore(); } sub restore_me { $_[0] = $_[0]->restore(); }
|
|---|