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.