chuckd has asked for the wisdom of the Perl Monks concerning the following question:

can anyone tell me what the difference between:
%hash = ();
and
undef %hash;
is in terms of memory allocation?
Actually how would I undef a hash ref?
If my hash looks like this: $hashRef?

Replies are listed 'Best First'.
Re: COMPARING MEMORY ISSUES
by mikelieman (Friar) on Feb 05, 2009 at 21:33 UTC
    One is empty.
    The other is undefined.
    undef $hashRef should do the trick, I'd think.
      undef $hashRef should do the trick, I'd think.

      Yes, that would undef the reference itself — but that might not necessarily lead to the hash being undefined (which I think is what the OP is after...).  undef %$hashRef, OTOH, would undefine the hash being referenced.

      But I suspect the real question here is "why is the associated memory not being freed?" :)   If so, circular references (in data structures held in the hash) might be the reason...  Object::Destroyer might help in this case. Also see Re^3: Large Memory for a list of related modules that might help with locating circular references.