> -----Original Message----- > From: Frank Wesemann [mailto:[EMAIL PROTECTED] > Sent: Thursday, 20 April 2006 8:03 AM > Subject: Hashes in %udat [snip] > 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? (http://perl.apache.org/embperl/pod/doc/Embperl.-page-5-.htm#sect_15) 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 (http://search.cpan.org/~cwest/Apache-Session-1.80/Session.pm#BEHAVIOR): ... 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. Cheers, Andrew --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]