如何清除Perl哈希

比方说,我们定义一个匿名哈希像这样:

my $hash = {}; 

然后使用散列。 那么现在是清空或清除散列以便重用的时候了。 经过一番Googlesearch之后,我发现:

 %{$hash} = () 

和:

 undef %{$hash} 

两者都将满足我的需求。 两者有什么区别? 他们都是相同的方式来清空哈希?

是的,他们是完全一样的。 都从表中删除任何现有的键和值,并将散列设置为空列表。

请参阅perldoc -f undef :

undef EXPR
undef取消定义EXPR的值,该值必须是左值。 仅使用标量值,数组(使用“@”),散列(使用“%”),子例程(使用“&”)或types球(使用“*”)…
例子:

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

但是 ,您不应该使用undef来除去标量以外的任何值。 对于其他variablestypes,将其设置为该types的“空”版本 – 例如对于数组或散列, @foo = (); %bar = (); @foo = (); %bar = ();

%$hash_ref = (); 比find散列更有意义。 取消散列表示你已经完成散列。 分配一个空列表说你只想要一个空的散列。