On Sat, Oct 15, 2005 at 03:50:05PM -0500, Ken Williams wrote: > > On Oct 15, 2005, at 8:13 AM, Nicholas Clark wrote: > > >On Tue, Oct 04, 2005 at 12:25:36PM +0200, Rafael Garcia-Suarez wrote: > >> > >>Nicholas, I think you're the one to blame here... > > > >I know. I found that I needed to remove a long deprecated feature to > >make a > >significant improvement elsewhere. > > I say good riddance. defined(%hash) has always been un-perlish and has > long been deprecated, and the memory savings are pretty significant. > After all, "deprecated" does mean that it's likely to actually go away > sometime:
Strictly all I have done is caused defined %foo::bar:: to always be true. Specifically, if a symbol table is created, it is now always "defined". Whereas previously it was only defined if storage had been allocated. (I think. Whatever the regular rules for a hash being defined) Replace defined %foo::bar:: with defined *foo::{HASH}->{'bar::'} and all will still work as expected, both in blead and earlier versions. That syntax is warnings free and strict safe. (This is because merely mentioning %foo::bar:: in the script causes the tokeniser to create the symbol table. The change in blead is that symbol tables are now being stored in such a way that their extra data is being hung from the hash's array, rather than burdening *every single hash*, so creating the symbol table is also allocating the array there and then) Nicholas Clark