perl-embperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew O'Brien" <>
Subject RE: Hashes in %udat
Date Wed, 19 Apr 2006 23:47:31 GMT

> -----Original Message-----
> From: Frank Wesemann [] 
> Sent: Thursday, 20 April 2006 8:03 AM
> Subject: Hashes in %udat
> Repeatedly changing the values is reflected in the respective 
> pages but
> they never see the values from the other page.
> I found a workaround in changing something in the first Level 
> of %udat.
> If I add a $udat{'ptime'} = time() in the pages, than they 
> both see the
> other values too. So they both print:
> "$VAR1 = {
> 	'lists' => { 
> 		     'list1' => { 'key1' => 'something',
> 				  'key2' => 'someotherthing' }
> 		    }
> 	}
> Am I missing something
> Is this a bug? 

No - its expected behaviour when you know why to expect it :) This is
something that really should 
be documented explicitly in the Embperl docs as it catches a few people!

Gerald, any chance of getting a quick sentence to that effect in the
%udat description?

Think of it this way: If you do $hash{key1}{key2}++ are you updating any
element of %hash? No, you are updating the hash pointed to by the
reference in $hash{key1}. The reference is still the same so a shallow
check of %hash means no changes are detected.

The most common fix is, as you've already done, to update a timestamp or
simply increment a top-level counter or similar.

%udat is essentially a tied hash via Apache::Session. From the Apache
session docs

Note that Apache::Session does only a shallow check to see if anything
has changed. If nothing changes in the top level tied hash, the data
will not be updated in the backing store. You are encouraged to
timestamp the session hash so that it is sure to be updated.

Hope that explains what you've experienced.



To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message