gpt4 book ai didi

perl - 更改 "for ( keys %hash ) {}"循环中的键

转载 作者:行者123 更新时间:2023-12-04 05:18:21 24 4
gpt4 key购买 nike

我记得一些关于不更改 key 的事情

for my $key ( keys %hash ) { ...

例如
for my $key ( keys %hash ) {
$key = "$key_x";
}

但是删除键和更改值就可以了。
我的内存还好吗?

最佳答案

我想你记得的是如果你这样做了

for my $item (@array) {
...
}

然后在 @array 中间添加或删除项目(例如通过使用 splice )是不允许的,如果你尝试它的结果是未定义的。事实上,在过去,您实际上可能会以这种方式使 perl 崩溃。

由于 keys 返回的列表是一个副本,它完全在循环开始时确定,并且从散列中添加和删除键根本不会影响循环。这意味着你可以做这样的事情
for my $key (keys %hash) {
$hash{lc $key} = delete $hash{$key};
}

100% 安全,无需担心。我可以保证这在 perl 5.6.1(2001 年 4 月)中是正确的,当时在 perlfunc 中添加了“返回的值是副本”的注释,但似乎从那时起一直如此,而变化只是到文档。

$key在循环中被别名为临时列表中的值,您可以更改它而不会发生任何不好的事情,但它不会对 %hash 产生任何影响根本。

关于perl - 更改 "for ( keys %hash ) {}"循环中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2431637/

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