我想完全重置我的%哈希,所以它根本不包含键或值.我更喜欢使用一个线程,而不是使用一个循环.
到目前为止我已经尝试过:
%hash = 0; %hash = undef;
但是这两个错误都以严格的模式发出警告,所以我写了一个简单的for循环来实现同样的事情:
for (keys %hash) { delete $hash{$_}; }
这是有效的,但我真的很想用一个单行.有没有办法简单地重置我忽略的哈希?
解决方法
两个%hash =();和undef%hash;将工作,不同的是后者将放弃一些记忆用于其他事情.前者会将内存中的内容保留在之前使用的哈希中,假设当哈希被重新填充时,它将被再次使用.
您可以使用Devel :: Peek观察行为:
$perl -MDevel::Peek -we'my %foo = (0 .. 99); %foo = (); Dump \%foo; undef %foo; Dump \%foo' SV = IV(0x23b18e8) at 0x23b18f0 REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x23acd28 SV = PVHV(0x23890b0) at 0x23acd28 REFCNT = 2 FLAGS = (PADMY,SHAREKEYS) ARRAY = 0x23b5d38 KEYS = 0 FILL = 0 MAX = 63 RITER = -1 EITER = 0x0 SV = IV(0x23b18e8) at 0x23b18f0 REFCNT = 1 FLAGS = (TEMP,SHAREKEYS) ARRAY = 0x0 KEYS = 0 FILL = 0 MAX = 7 RITER = -1 EITER = 0x0
PVHV中的MAX字段是重要的一点.