dポイントプレゼントキャンペーン実施中!

下記の?????の所に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;

A 回答 (3件)

HTML::Template についてはよく知りませんが、???... の部分は無名ハッシュを push すればよいように思います。



push @loop, { one => $one, two => $two, three => $three };
    • good
    • 0
この回答へのお礼

ありがとうございます、無事解決できました。

ですが、サブルーチンにしたところまた分からない所がでてきました。
もしよろしければこちらも見ていただければ幸いです。
http://oshiete1.goo.ne.jp/qa4953602.html

この度は、ご回答ありがとう御座いました。

お礼日時:2009/05/12 21:40

多重投稿申し訳ありません。


一箇所間違えてました。
push(@aLP01,\%hTMP);

push(@aLP01,\%hTmp);
としてください。
実際の動作確認していないので他にもあるかも・・・。
いちおう考え方の説明ということで許してやってください。
    • good
    • 0

スクリプト側はこんな感じかと思います。


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'は保険なんですが、意味はご自分でお調べください。
    • good
    • 0
この回答へのお礼

丁寧なご説明ありがとうございます。
非常に分かりやすく勉強になりました。

これ自体は解決できましたが、サブルーチンにしたところまた分からない所がでてきました。
もしよろしければこちらも見ていただければ幸いです。
http://oshiete1.goo.ne.jp/qa4953602.html

この度は、ご回答ありがとう御座いました。

お礼日時:2009/05/12 21:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!