加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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字段是重要的一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读