我想完全重置我的%hash所以它根本不包含键或值.我更喜欢使用单线而不是使用循环.
到目前为止,我尝试过:
%hash = 0;
%hash = undef;
Run Code Online (Sandbox Code Playgroud)
但是这些都在严格模式下抛出错误并启用了警告,所以我写了一个简单的for循环来实现同样的事情:
for (keys %hash) {
delete $hash{$_};
}
Run Code Online (Sandbox Code Playgroud)
这有效,但我真的想用一个班轮做这件事.有没有办法简单地重置我忽略的哈希?
raf*_*afl 37
双方%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,ROK)
RV = 0x23acd28
SV = PVHV(0x23890b0) at 0x23acd28
REFCNT = 2
FLAGS = (PADMY,SHAREKEYS)
ARRAY = 0x0
KEYS = 0
FILL = 0
MAX = 7
RITER = -1
EITER = 0x0
Run Code Online (Sandbox Code Playgroud)
该MAX在田野PVHVs为最重要的一点.
| 归档时间: |
|
| 查看次数: |
14755 次 |
| 最近记录: |