В perl 5.10.1 можно ли добавлять новые элементы в хэш, итерации через него с помощью оператора each
?Добавление новых членов при итерации хэша с «каждым»
Smth. как в этом коде (подготовка данных для диаграмм 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 ]};
}
}
}
}
Спасибо! Можно ли опустить '@ keys' в свой код и просто использовать' для my $ k (keys% hash) '? –
@AlexanderFarber Да, в этом случае '@ keys' могут быть опущены. Я использовал дополнительную переменную, чтобы сделать копирование списка ключей ясным. Однако нельзя использовать циклы foreach, если изменить массив, который выполняется итерацией. – amon