gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:40:45 26 4
gpt4 key购买 nike

我想完全重置%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,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


MAX中的 PVHV字段是重要的位。

关于perl - 如何在不使用for循环的情况下完全重置哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3810524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com