$self is probably not a reference to an object, unless you've done something like this:
my $object = Class->new();
my $self = \$object;
That's important, because you're doing nearly everything else right. Without seeing your code, I expect you may be doing something like this:
$object->restore();
sub restore {
my $self = shift;
$self = restore();
}
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.
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();
}
|