我记得关于不更改密钥的事情
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 中添加了“返回值是副本”的注释,但似乎从那时起就一直如此,而且变化只是到文档。
Since $key
循环中的值被别名为临时列表中的值,您可以更改它而不会发生任何不良情况,但它不会对%hash
at all.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)