Alex Rivera | Logout

How to clear a Perl hash

Asked 2010-08-01T04:50:31.950
42

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?

Edit
Report

1 Answer

27

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 = ();

answered 2010-08-01T05:51:47.893

Your Answer