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

前端之家收集整理的这篇文章主要介绍了perl – 更改“for(keys%hash){}”循环中的键前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我记得有些事情没有改变

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产生任何影响.

猜你在找的Perl相关文章