- ベストアンサー
HTML::Templateのループと配列のハッシュの作成
下記の?????の所にpushで配列のハッシュを作成しようと考えていましたが、うまくいきません。 下記のソース自体が的外れでしたら申し訳ございません。?????以外の場所も指摘して頂ければ幸いです。 よろしくお願い致します。 <TMPL_LOOP NAME="loop"> <TMPL_VAR NAME="one"><BR> <TMPL_VAR NAME="two"><BR> <TMPL_VAR NAME="three"><BR> </TMPL_LOOP> use HTML::Template; @data = ('aa<>ab<>ac','ba<>bb<>bc','ca<>cb<>cc'); foreach $xxx (@data) { my ($one,$two,$three) = split(/<>/,$xxx); ???????????????????? } my $template = HTML::Template->new(filename=>'sample.html'); $template->param(loop=>\@loop); print "Content-Type: text/html\n\n"; print $template->output;
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
HTML::Template についてはよく知りませんが、???... の部分は無名ハッシュを push すればよいように思います。 push @loop, { one => $one, two => $two, three => $three };
その他の回答 (2)
- ralf124c
- ベストアンサー率52% (232/446)
多重投稿申し訳ありません。 一箇所間違えてました。 push(@aLP01,\%hTMP); は push(@aLP01,\%hTmp); としてください。 実際の動作確認していないので他にもあるかも・・・。 いちおう考え方の説明ということで許してやってください。
- ralf124c
- ベストアンサー率52% (232/446)
スクリプト側はこんな感じかと思います。 use HTML::Template; @data = ('aa<>ab<>ac','ba<>bb<>bc','ca<>cb<>cc'); my %hDISP; my @aLP01; foreach $xxx (@data) { my ($one,$two,$three) = split(/<>/,$xxx); ## ???????????????????? my %hTMP; $hTmp{ONE} = $one; $hTmp{TWO} = $two; $hTmp{THREE} = $three; ## ???????????????????? push(@aLP01,\%hTMP); } $hDISP{LOOP}=\@aLP01; ## my $template = HTML::Template->new(filename=>'sample.html'); ## $template->param(loop=>\@loop); my $template = HTML::Template->new(filename => 'sample.html', 'die_on_bad_params' => 0); $template->param(\%hDISP); print "Content-Type: text/html\n\n"; print $template->output; --------------------------------------------- やり方はループ内にハッシュを作ってループ外の配列にリファレンスをプッシュしてゆきます。 そのループのリファレンスを一旦ハッシュに入れた方が、ループ外のテンプレート指定も出来ますので便利です。 タグの名前は、大文字で指定しましたが、初期のTemplateモジュールが大文字しか使えなかった頃の名残で、今でもHTMLのタグと区別するのに見やすいのでわたしは大文字をいまだに使っています。現在では区別しますのでテンプレート側とで調整してください。 'die_on_bad_params'は保険なんですが、意味はご自分でお調べください。
お礼
丁寧なご説明ありがとうございます。 非常に分かりやすく勉強になりました。 これ自体は解決できましたが、サブルーチンにしたところまた分からない所がでてきました。 もしよろしければこちらも見ていただければ幸いです。 http://oshiete1.goo.ne.jp/qa4953602.html この度は、ご回答ありがとう御座いました。
お礼
ありがとうございます、無事解決できました。 ですが、サブルーチンにしたところまた分からない所がでてきました。 もしよろしければこちらも見ていただければ幸いです。 http://oshiete1.goo.ne.jp/qa4953602.html この度は、ご回答ありがとう御座いました。