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

perl – 更改“for(keys%hash){}”循环中的键

发布时间:2020-12-16 06:11:18 所属栏目:大数据 来源:网络整理
导读:我记得有些事情没有改变 for my $key ( keys %hash ) { ... 例如 for my $key ( keys %hash ) { $key = "$key_x";} 但删除键和更改值将没有问题. 我的记忆好吗? 解决方法 我想你要记住的是,如果你这样做的话 for my $item (@array) { ...} 然后不允许在@arr
我记得有些事情没有改变

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

例如

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

但删除键和更改值将没有问题.
我的记忆好吗?

解决方法

我想你要记住的是,如果你这样做的话

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

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

由于keys返回的列表是一个副本,因此它完全在循环开始时确定,并且从散列中添加和删除键根本不会影响循环.这意味着你可以做类似的事情

for my $key (keys %hash) {
    $hash{lc $key} = delete $hash{$key};
}

100%安全无需担心.我可以保证这是真的回到perl 5.6.1(2001年4月),当时“返回的值是副本”的注释被添加到perlfunc,但似乎永远是这样,并且变化只是到文档.

由于循环中的$key别名为临时列表中的值,因此您可以更改它而不会发生任何错误,但它根本不会对%hash产生任何影响.

(编辑:李大同)

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

    推荐文章
      热点阅读