my %TempMap; sub foo :lvalue { my $self= shift; my $value= $self->fetch("foo"); $TempMap{"".\$value}= [$self,"foo"]; return bless My::Module::Value, \$value; } sub My::Module::Value::DESTROY { my $svValue= shift; my( $self, $name )= @{ $TempMap{$svValue} }; $self->store( $name, $$svValue ); }