假设我们定义了一个像这样的匿名哈希:
my $hash = {};
然后使用哈希。然后是时候清空或清除哈希了 重用。经过一些Google搜索,我找到了:
%{$hash} = ()
和
undef %{$hash}
两者都将满足我的需求。这两者有什么区别?它们是否都是用于清空哈希的相同方法?
答案 0 :(得分:31)
%$hash_ref = ();
比取消散列更有意义。取消定义哈希表示你已完成哈希。分配一个空列表表示你只想要一个空哈希。
答案 1 :(得分:23)
是的,它们完全相同。两者都从表中删除任何现有的键和值,并将哈希值设置为空列表。
请参阅perldoc -f undef:
undef EXPR
undef取消定义EXPR的值,该值必须是左值。仅限使用 标量值,数组(使用“@”),散列(使用“%”),a 子程序(使用“&”)或typeglob(使用“*”)...
例子:
undef $foo;
undef $bar{'blurfl'}; # Compare to: delete $bar{'blurfl'};
undef @ary;
undef %hash;
然而,您不应使用undef
删除除标量之外的任何值。对于其他变量类型,将其设置为该类型的“空”版本 - 例如对于数组或哈希,@foo = (); %bar = ();