使用foreach创建Perl CGI表

时间:2012-07-13 07:19:23

标签: perl foreach cgi

我刚刚玩过Perl CGI和SQLite。我认为这样的事情可以完成这项工作。

my $res = $dbh->selectall_arrayref("SELECT name, surename, phone FROM status;"),
print $cgi->table(
$cgi->Tr(
    { -align => "CENTER", -valign => "TOP" },
    $cgi->th( [ 'Name', 'Surename', 'Phone' ] )
),
foreach my $row (@$res){
    ( $name, $surename, $phone ) = @$row,
    print $cgi->Tr( $cgi->td($name), $cgi->td($surename), $cgi->td($phone) ),
  }
);

是否需要手动创建HTML文档的表格?

2 个答案:

答案 0 :(得分:1)

您应该熟悉POD for the CGI module。在那里,您将找到一个表创建示例:

print table({-border=>undef},
           caption('When Should You Eat Your Vegetables?'),
           Tr({-align=>'CENTER',-valign=>'TOP'},
           [
              th(['Vegetable', 'Breakfast','Lunch','Dinner']),
              td(['Tomatoes' , 'no', 'yes', 'yes']),
              td(['Broccoli' , 'no', 'no',  'yes']),
              td(['Onions'   , 'yes','yes', 'yes'])
           ]
           )
        );

从示例中可以看出,您需要指定进入表格的成分。 CGI模块的HTML标签助手并不神奇;它们只是Perl函数(或取决于您如何使用模块的方法),它们与它们所代表的HTML密切相关。如果您必须在HTML中输入<table><tr><th>...,那么您的代码帮助程序必须是tableTrth等。使用标记或代码帮助程序的组合只要获得输出的HTML对于浏览器来说是可理解的,在循环中就可以了。

使用CGI模块的脚本可以从命令行运行,这是一个很好的调试工具,因为它们会将原始HTML转储到屏幕上供您查看。

答案 1 :(得分:0)

答案是响亮的NO。这两行代码:

my $cats = $db->selectall_arrayref("select * from pubs..authors");
print map { $q->Tr(undef, $q->td($_)) ."\n"} @$cats;

会给你(好吧,我......)

<tr><td>172-32-1176</td> <td>White</td> <td>Johnson</td> <td>408 496-7223</td>     <td>10932 Bigge Rd.</td> <td>Menlo Park</td> <td>CA</td> <td>94025</td> <td>1</td></tr>
<tr><td>213-46-8915</td> <td>Green</td> <td>Marjorie</td> <td>415 986-7020</td> <td>309 63rd St. #411</td> <td>Oakland</td> <td>CA</td> <td>94618</td> <td>1</td></tr>
<tr><td>238-95-7766</td> <td>Carson</td> <td>Cheryl</td> <td>415 548-7723</td> <td>589 Darwin Ln.</td> <td>Berkeley</td> <td>CA</td> <td>94705</td> <td>1</td></tr>
.... and however many more authors from pubs

为了完整性,使用hashref,你可以像这样拉出标题

my $cats = $db->selectall_hashref("select * from pubs..authors", [ au_id]);

my @rows = values %$cats; # array of hashes now

print $q->Tr(undef, $q->th([keys( %$rows[0] )])),"\n"; #borrow keys from first guy 
print map { $q->Tr(undef, $q->td( [ values(%$_) ] ) ),"\n"; }  @rows;