Я пишу Perl-скрипт для выполнения некоторых математических операций с хешем. Этот хэш содержит значения, указанные в примере ниже. Я написал код ниже. Если я выполню этот код для значения массива отдельно, не используя цикл foreach, вывод будет в порядке. Но если я запускаю это, используя цикл foreach для значений массива, сумма значений в A хороша, но из B выходные данные добавляют предыдущие значения.
Hash Sample:
$VAR1 = 'A';
$VAR2 = {
'"x"' => [values],
'"y"' => [values],
and so on...
$VAR3 = 'B';
$VAR4 = {
'"x"' => [values],
'"y"' => [values],
and so on...
$VARn....
Код:
#!/usr/bin/perl -w
use strict;
use List::Util qw(sum);
my @data;
my @count;
my $total;
my @array = ("A", "B", "C", "D");
foreach my $v (@array) {
my %table = getV($v); #getV is a subroutine returing a hash.
for my $h (sort keys %table) {
for my $et (sort keys %{ $table{$h} } ) {
for $ec ($table{$h}{$et}) {
push @data, $ec;
@count = map { sum(@{$_}) } @data;
$total = sum(@count);
}
}
print "sum of $v is $total\n";
}
Я думаю, что проблема в этой строке. Он сохраняет все предыдущие значения и, следовательно, добавляет все значения в следующем цикле foreach.
push @data, $ec;
Итак, здесь у меня есть две проблемы:
1) Как обновить массив (@data) в каждой итерации цикла foreach?
2) Как добавить значения в массив ref ($ec) и сохранить их в массиве? Потому что, когда я использую следующий код:
for $ec ($table{$h}{$et}) {
@count = map { sum(@{$_}) } @$ec;
$total = sum(@count);
}
Вывод дает мне те же значения для @count и $total.
Пожалуйста, предоставьте мне предложения.