perl – 如何在不使用for循环的情况下完全重置哈希?
发布时间:2020-12-15 21:31:09 所属栏目:大数据 来源:网络整理
导读:我想完全重置我的%哈希,所以它根本不包含键或值.我更喜欢使用一个线程,而不是使用一个循环. 到目前为止我已经尝试过: %hash = 0;%hash = undef; 但是这两个错误都以严格的模式发出警告,所以我写了一个简单的for循环来实现同样的事情: for (keys %hash) {
|
我想完全重置我的%哈希,所以它根本不包含键或值.我更喜欢使用一个线程,而不是使用一个循环.
到目前为止我已经尝试过: %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字段是重要的一点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
