У меня есть массив ссылок на хэш. Хэши содержат 2 ключа, USER и PAGES. Цель здесь состоит в том, чтобы просмотреть массив ссылок на хэш и сохранить итоговое количество страниц, напечатанных пользователем на принтере (это происходит из журналов событий). Я извлек данные из электронной таблицы Excel и использовал регулярные выражения для извлечения имени пользователя и страниц. В электронной таблице 182 строки, и каждая строка содержит имя пользователя и количество страниц, которые они напечатали в этом задании. В настоящее время сценарий может печатать каждое задание на печать (все 182) с именем пользователя и страницами, которые они напечатали, но я хочу объединить это так, чтобы оно показывало: имя пользователя 266 (то есть просто покажет имя пользователя один раз и общее количество напечатанных страниц для всей таблицы.
Вот моя попытка просмотреть массив ссылок на хеш, посмотреть, существует ли пользователь уже и, если да, + = количество страниц для этого пользователя в новом массиве ссылок на хеш (меньший). Если нет, то добавьте пользователя в новый массив хеш-ссылок:
my $criteria = "USER";
my @sorted_users = sort { $a->{$criteria} cmp $b->{$criteria} } @user_array_of_hash_refs;
my @hash_ref_arr;
my $hash_ref = \@hash_ref_arr;
foreach my $index (@sorted_users)
{
my %hash = (USER=>"",PAGES=>"");
if(exists $index{$index->{USER}})
{
$hash{PAGES}+=$index->{PAGES};
}
else
{
$hash{USER}=$index->{USER};
$hash{PAGES}=$index->{PAGES};
}
push(@hash_ref_arr,{%hash});
}
Но выдает ошибку:
Для глобального символа "% index" требуется явное имя пакета в ...
Может быть, моя логика не самая лучшая в этом. Я должен использовать массивы вместо этого? Кажется, что хеш - лучшая вещь здесь, учитывая природу моих данных. Я просто не знаю, как сузить массив ссылок на хэш, чтобы просто получить имя пользователя и общее количество напечатанных страниц (я знаю, что мне кажется избыточным, но я просто пытаюсь быть понятным). Спасибо.