How to clear a Perl hash

Let's say we define an anonymous hash like this:

my $hash = {};

And then use the hash afterwards. Then it's time to empty or clear the hash for reuse. After some Google searching, I found:

%{$hash} = () 

and:

undef %{$hash}

Both will serve my needs. What's the difference between the two? Are they both identical ways to empty a hash?

Answers


Yes, they are absolutely identical. Both remove any existing keys and values from the table and sets the hash to the empty list.

See perldoc -f undef:

undef EXPR undef   Undefines the value of EXPR, which must be an lvalue. Use only on a scalar value, an array (using "@"), a hash (using "%"), a subroutine (using "&"), or a typeglob (using "*")... Examples:

               undef $foo;  
               undef $bar{'blurfl'};      # Compare to: delete $bar{'blurfl'};  
               undef @ary;  
               undef %hash;

However, you should not use undef to remove the value of anything except a scalar. For other variable types, set it to the "empty" version of that type -- e.g. for arrays or hashes, @foo = (); %bar = ();


%$hash_ref = (); makes more sense than undef-ing the hash. Undef-ing the hash says that you're done with the hash. Assigning an empty list says you just want an empty hash.


Need Your Help

Convert row names into a column in Pandas

python pandas

I have the following Pandas data frame:

How do big companies of software developers check for bugs in their programs?

testing quality release

I was wondering how big companies of software developers check for bugs in their programs.