HTML::FillInForm(4)
HTML::FillInFormを触っていて、「あれバグ?」というのがありました。
以下、そのときのソースです。
index.htmlをHTML::Templatesで表示しています。
HTML(index.html)
<table cellspacing="0" cellpadding="0" border="1"> <tr valign="top"> <td>ラジオボタン</td> <td> <input type="radio" name="media" value="0">ラジオ <input type="radio" name="media" value="1">テレビ <input type="radio" name="media" value="2">新聞 <input type="radio" name="media" value="3">映画 </td> </tr> <tr valign="top"> <td>チェックボックス</td> <td> <input type="checkbox" name="news" value="0">朝 <input type="checkbox" name="news" value="1">昼 <input type="checkbox" name="news" value="2">夜 </td> </tr> </table>
index.cgi
#!/usr/local/bin/perl use strict; use CGI; use CGI::Carp qw(fatalsToBrowser); use lib qw(../../extlib); use HTML::FillInForm; use HTML::Template; print "Content-type: text/html\n\n"; #1 CGI.pmを使用する my $cgi = CGI->new; $cgi->param( "media", "0","2" ); $cgi->param( "news", "0","2" ); #2 HTMLを読み込む my $template = HTML::Template->new( filename => './index.html' ); my $html = $template->output(); #3 CGI.pmの値を埋め込む my $fif = new HTML::FillInForm; my $output = $fif->fill(scalarref => \$html, fobject => $cgi); print $output;
その実行結果が、以下のとおりです。ポイントのみ抜粋。
<table cellspacing="0" cellpadding="0" border="1"> <tr valign="top"> <td>ラジオボタン</td> <td> <input value="0" name="media" type="radio">ラジオ <input value="1" name="media" type="radio">テレビ <input value="2" name="media" type="radio">新聞 <input value="3" name="media" type="radio">映画 </td> </tr> <tr valign="top"> <td>チェックボックス</td> <td> <input checked="checked" value="0" name="news" type="checkbox">朝 <input value="1" name="news" type="checkbox">昼 <input checked="checked" value="2" name="news" type="checkbox">夜 </td> </tr> </table>
ちょっと、わかりにくいのですが、ラジオボタンに0という値を設定しているテンプレートに、HTML::FillInForm(1.05)を使用して0という値を埋め込むと、checkしてくれないのです。けれど、チェックボックスや、プルダウン(select)は、きちんと選択(checked、selected)してくれるのです。「これって、バグ?」と思ったりするのですが、そもそも、ラジオボタンに0という値を設定していいのか?という疑問もあります。こいうのは、誰に言えばいいのかなあ〜、と実家で思ったんですが、わからず、ここにめもを残すのでした。
関連