次の問題があります。レンダリングしたいハッシュへの参照の配列があります。
$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)
、他の 2 行は空白です。
これを理解する限り、row
を呼び出すにはテンプレート内の変数を逆参照する必要がありますrow.nicer_key
が、->
またはを操作{}
するとパーサー エラーが発生します。
これは可能ですか、それとも何が間違っていますか?
編集:データ構造の背景:プログラムは次のことを行います:
- テーブルを含む 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
、コンテンツが正しいように思えます。