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字段是重要的一点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |