Кажется, я очень сбиваю с толку.Я попытаюсь «нарисовать» эту структуру данных:
hash-> key -> ((ключ) -> [(ключ, значение), (ключ, значение), (ключ, значение) ,...], (ключ, значение))
Итак, есть первый ключ, значение которого заключено в круглые скобки.Значение для первого ключа хэша - два ключа, один (правый) - другой простой ключ, пара значений.Значение другого (левого) ключа является массивом хэшей.Я могу обновить «правильный» ключ, пару значений со следующей строкой кода:
$hash{$parts[1]}{"PAGES"} += $parts[2];
Где $ parts [1] и $ parts [2] - это просто элементы из массива.Я + = число к «правильному» ключу, пара значений из моего хэша.Что мне нужно сделать сейчас, это обновить «левый» ключ, пара значений - массив хэшей в пределах хэша хэшей.Вот как я инициализирую массив для обеих пар ключ-значение в хэше хэшей:
$hash{$printer}{"PAGES"} = 0;
$hash{$printer}{"USERS"} = [@tmp];
Вот одна из моих многочисленных попыток доступа и обновления значений в массиве хэшей:
$hash{$parts[1]}{"USERS"}[$parts[0]] += $parts[2];
Я просто не могу понять правильный синтаксис для этого.Если бы кто-нибудь мог мне помочь, я был бы благодарен.Спасибо.
Редактировать: Я предполагаю, что более острый вопрос: как мне получить ключ хеша из массива хешей (имея в виду, что массив находится в хэше хэшей)?
Редактировать: Добавил это в код:
#Go through each user to check to see which user did a print job and add the page
#count to their total
#$parts[0] is the user name, $parts[1] is the printer name, $parts[2] is the page
#count for the current print job
for(my $i=0;$i<$arr_size;$i++)
{
my $inner = $hash{$parts[1]}{"USERS"}[$i];
my @hash_arr = keys %$inner;
my $key = $hash_arr[0];
#problem line - need to compare the actual key with $parts[0]
#(not the key's value which is a number)
if($hash{$parts[1]}{"USERS"}[$i]{$key} eq $parts[0])
{
$hash{$parts[1]}{"USERS"}[$i]{$parts[0]} += $parts[2];
}
}
Редактировать: Упс, хе-хе, это то, что мне нужно.Это еще не совсем там, но это то, что я ищу:
if($key eq $parts[0])
{
$hash{$parts[1]}{"USERS"}[$i]{$parts[0]} += $parts[2];
}