У меня есть следующая проблема: у меня есть массив ссылок на хеши, которые я хочу отобразить.Как хэши разыменования в Template Toolkit?
$VAR1 = \{
'nice_key' => undef,
'nicer_key' => '0',
'nicest_key' => 'Miller'
};
$VAR2 = \{
'nice_key' => undef,
'nicer_key' => '0',
'nicest_key' => 'Farns'
};
$VAR3 = \{
'nice_key' => undef,
'nicer_key' => '0',
'nicest_key' => 'Woodstock'
};
...
Я передал это как \@tablerows
к шаблону. Внутри шаблона я:
[% FOREACH row = tablerows %]
<tr>
<td>[% row %]</td>
<td>[% row.nicer_key %]</td>
<td>[% row.nicest_key %]</td>
</tr>
[% END %]
В [% row %]
-line выводит что-то вроде REF(0x74a0160)
, но остальные две строки просто пустым.
Насколько я понимаю это, row
переменных в шаблоне должен быть разыменовывается для того, чтобы вызвать row.nicer_key
, но работать с ->
или {}
приводит к синтаксической ошибке.
Возможно ли это, или что я ошибаюсь?
Edit: Предпосылки структуры данных: Программа выполняет следующие действия:
- Разобрать файл HTML с таблицей в нем
- В процессе анализа, читать каждую строку таблицы в хэш (
nice_key
s являются ячейками таблицы) и сохраняют эти хеши в хэш хешей (давайте назовем егоtabledata
) - Выполняем некоторые запросы к базе данных и добавляем их во внутренние хеши (например,
nicest_key
нет в исходном HTML-файле) - Выведите таблицу HTML в том же порядке, что и раньше.
Для сохранения порядка исходной таблицы я заполнил массив tablerows
на шаге 2 со ссылками на внутренние хеши.
Edit2: Что я намеченный:
Стрелки символизируют ссылки на хэш.
Как я заполнил эти данные
my %tabledata =();
my @tablerows =();
foreach (... parsing ...) {
...
$tabledata{$current_no} =();
push @tablerows, \$tabledata{$current_no};
$tabledata{$current_no}{$row} = $value;
}
Когда я дамп каждого из них %tabledata
и @tablerows
содержание кажется мне правильным.
Ваша проблема заключается в том, что ваш массив не содержит ссылок на хеши, а ссылки на ссылки на хеши. – flesk
Хорошо, но это означает, что я также смогу разыменовать эти вложенные ссылки. Или нет? – contradictioned
Почему ваш массив выглядит в первую очередь? Вероятно, вы немного увлеклись ссылкой на вещи в своем коде Perl. – flesk