perl – 如何在不使用for循环的情况下完全重置哈希?

前端之家收集整理的这篇文章主要介绍了perl – 如何在不使用for循环的情况下完全重置哈希?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想完全重置我的%哈希,所以它根本不包含键或值.我更喜欢使用一个线程,而不是使用一个循环.

到目前为止我已经尝试过:

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

猜你在找的Perl相关文章