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

Reply via email to