Разыменование хэша в Template Toolkit

У меня есть многомерный хеш, который я пытаюсь распечатать в виде таблицы. Я не могу получить право ссылки / разыменования.

Я помещаю электронную таблицу Excel в хэш, и я хочу распечатать соответствующие строки и столбцы в html и сопоставить строки / столбцы электронной таблицы (некоторые из которых пусты).

Я использую Perl Dancer и Template Toolkit. На стороне сервера хеш работает нормально. print $big_table{$column}{$row}; на стороне сервера, и он печатает правильный столбец и строку без проблем.

На стороне клиента 0, 1, 2... должны быть столбцами. Некоторые столбцы пусты, поэтому я не могу просто распечатать содержимое.

Теперь он печатает ARRAY (0x3e5389c). Я попробовал другой способ, и он напечатал HASH ...

Я знаю, что у меня есть проблемы со ссылками / разыменованием. Любой совет приветствуется.

Код на стороне сервера:

my %big_table = ();

# $cell->value() is the text ripped from the excel cell at that location
$big_table{$column}{$row} = $cell->value();

template 'index', { big_table => \%big_table };

Сторона клиента:

<Table border="3">
<% FOREACH n IN big_table.0 %>

<TR><TD>&nbsp<% big_table.0.keys %>&nbsp<TD>&nbsp<% big_table.1.keys %>
&nbsp<TD>&nbsp<% big_table.2.keys %>&nbsp<TD>&nbsp<% big_table.3.keys %>
&nbsp <TD>&nbsp<% big_table.4.keys %> 
&nbsp<TD>&nbsp<% big_table.5.keys %>&nbsp

<% END %>
</Table>

Заранее спасибо!


person user2875251    schedule 12.01.2014    source источник
comment
Все заработало. Из хеша превратился в массив. '$ big_table [$ col] [$ row] = $ cell- ›value ();' и заполнил второй массив всеми номерами строк. Клиент выглядит как ‹% FOREACH r IN row_numbers%› ‹TR› ‹TD› & nbsp ‹% big_table.0. $ R%› & nbsp ‹TD› & nbsp ‹% big_table.1. $ R%› ... ‹% END % ›Отлично работает, но, вероятно, безумно неэффективно :(. Электронная таблица состоит из 800 строк, так что это второй массив с 800 элементами, просто для перебора цикла FOREACH.   -  person user2875251    schedule 12.01.2014
comment
Опубликуйте свои результаты как ответ и отметьте их как принятые.   -  person woolstar    schedule 12.01.2014
comment
Неэффективно ?! Как вы думаете, почему перебор более 800 индексов массива менее эффективен, чем 800 хеш-ключей?   -  person ikegami    schedule 12.01.2014
comment
Не более-менее эффективно для этого. Я имел в виду, что я создал массив ADDItional, который я заполнил местоположениями $ row только потому, что смог правильно разыменовать работу.   -  person user2875251    schedule 12.01.2014
comment
Я пытался опубликовать ответ раньше, но мне это не удалось. У меня недостаточно уличных кредитов или что-то в этом роде ... Думаю, я ждал достаточно долго, потому что теперь это позволяет мне.   -  person user2875251    schedule 12.01.2014


Ответы (1)


Все заработало.

Поменял на массив. '$ big_table [$ col] [$ row] = $ cell-> value ();' и заполнил второй массив всеми номерами строк.

Клиент выглядит как

<% FOREACH r IN row_numbers %>
<TR><TD> &nbsp <% big_table.0.$r %> &nbsp <TD> &nbsp <% big_table.1.$r %>...
<% END %>

Отлично работает, но, вероятно, безумно неэффективно :(. Таблица состоит из 800 строк, так что это второй массив с 800 элементами, просто для перебора цикла FOREACH.

person user2875251    schedule 12.01.2014