在 perl 5.10.1 中,可以在使用 each
运算符迭代哈希时向哈希添加新成员吗?
史密斯。就像这段代码(为 Google 图表准备数据)一样,我有一个数组哈希值的哈希值,并且我试图移动每个数组的最后一个元素:
sub split_aclr($) {
my $csvData = shift;
while (my ($csv, $href) = each %$csvData) {
next unless $csv =~ /_ACLR_/i;
my $len = scalar @{$href->{MEASUREMENT}};
if ($len > 1 && $href->{MEASUREMENT}->[$len - 1] eq 'CARRIER_CHANNEL') {
while (my ($key, $arr) = each %$href) {
my $moved = pop @$arr;
$csvData{$csv . '_CARRIER_CHANNEL'} = {$key => [ $moved ]};
}
}
}
}
最佳答案
在使用 each
迭代哈希时添加或删除哈希条目通常并不安全。如果您想这样做,最好将要迭代的键的显式列表保存到数组中,然后对其进行循环。
而不是
while (my $k, $v) = each %hash) {
$hash{"foo_$k"} = $v;
}
做
my @keys = keys %hash;
for my $k (@keys) {
my $v = $hash{$k};
$hash{"foo_$k"} = $v;
}
关于hash - 使用 "each"迭代哈希时添加新成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17571707/