At 11:51 AM +0000 12/23/01, Jean-Michel Hiver wrote:
>Maybe the way to do it would be to have a Serializable class that could have
>the following methods:
>
>freeze($self) : SCALAR
>thaw ($class) : OBJECT
>clone($self) : OBJECT;
>_freeze($self): SCALAR
>_remove_transient_attributes($self);
Hmmm... Maybe instead of Subclassing directly, we should implement
some sort of wrapper which would flag transient data internally.
my $serobj = Transient::Serobj->new(
'Serializer' => 'Storable'
);
$serobj->STORE(KEY,VALUE,TRANSIENT);
my $str = $serobj->freeze;
my $deserobj = Transient::Serobj->thaw($str,{
'Serializer' => 'Storable',
'Callbacks' => {
'KEY' => [CODEREF,CBARGS],
}
});
When the thaw method is called, it reads the stored object data
($str) and where the transient data is normally stored, the callback
(if specified) would be called. Otherwise the transient data
wouldn't be defined.
For instance, If I only wanted to store the two letter US State
abbreviation, but wanted to automatically have access to the state
name, you could implement it something like
my $session = Transient::Serobj->thaw($str,{
'Serializer' => 'Storable',
'Callbacks' => {
'STATENAME' => [
sub {
$GLOBAL::STATE2STATENAME{shift->{'STATE'}}
}
],
}
});
print "I live in ",$session->FETCH('STATENAME'),"\n";
It's seems a bit longwinded here, but once it was subclassed (along
with a few modified constants or variables), it would probably be
much cleaner...
Rob
--
When I used a Mac, they laughed because I had no command prompt. When
I used Linux, they laughed because I had no GUI.