【问题标题】:perl cgi | Definition List syntaxperl cgi |定义列表语法
【发布时间】:2010-08-09 06:15:48
【问题描述】:

找不到正确的语法来通过 Perl 创建定义列表以创建如下输出:

<dt>One</dt> 
        <dd><p>Testing 1</p></dd> 
<dt>Two</dt> 
        <dd><p>Testing 2</p></dd> 
<dt>Three</dt> 
        <dd><p>Testing 3</p></dd> 
</dl> 

我似乎找不到任何关于使用的文档。我尝试了$cgi-&gt;dl($cgi-&gt;dt([One,Testing1,Two,Testing2,Three,Testing3]))); 和其他变体,但到目前为止没有运气。到目前为止,搜索 Google 或 perldoc 没有帮助。

【问题讨论】:

  • 你在使用use strict; use warnings;吗?您包含的代码包含语法错误。
  • 请停止使用肮脏的旧 CGI.pm。请改用现代且干净的 Web 引擎,例如 DancerMojolicious

标签: perl cgi


【解决方案1】:
print $cgi->dl(
        $cgi->dt('One'),
        $cgi->dd(
                $cgi->p('Testing 1')
        ),
        $cgi->dt('Two'),
        $cgi->dd(
                $cgi->p('Testing 2')
        ),
        $cgi->dt('Three'),
        $cgi->dd(
                $cgi->p('Testing 3')
        ));

我真的会切换到 Template-Toolkit,而不是使用 CGI.pm 生成数据结构。

【讨论】:

  • 非常感谢。尝试用谷歌搜索“Perl cgi 定义列表”并没有产生任何与我正在寻找的东西相近的东西。你不会碰巧有一个好的 RTFM 链接吗?我对 Template-Toolkit 了解不多,我对 Perl 很陌生,除非它已经安装,否则我认为它不会成为我可以用于这个项目的东西,因为这个系统已经为特定目的配置,而且我不想冒着中断的风险尝试在那里放置新的东西。
  • template-toolkit.org - 如果尚未安装,则 Local::Lib 将允许您将其安装在单独的库路径中以及所需的任何依赖项中,因此它不会干扰其他任何内容在系统上。
【解决方案2】:

David 关于语法和使用Template::Toolkit 的建议是正确的。或其他模板模块。

这是一个简单的示例,它从脚本的 DATA 部分中的模板生成页面。

当您保留单独的模板文件并重用和组合它们时,当然真正的力量来了。

#!perl

use strict;
use warnings;

use Template;

my $page_data = {
    title => 'DL Demo',
    data  => [
        {   terms => ['One Term'],
            data  => ['One Definition'],
        },
        {   terms => [qw( Many Terms )],
            data  => ['One Definition'],
        },
        {   terms => ['One Term'],
            data  => [qw( Many Definitions )],
        },
    ],
};

my $tt = Template->new() or die "Ugh";

$tt->process(\*DATA, $page_data);


__DATA__

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN">
<html>
  <head>
    <title>[% title %]</title>
  </head>
  <body> 
    <div id="header">
      <a href="/index.html" class="logo" alt="Home Page"></a>
      <h1 class="headline">[% title %]</h1>
    </div>

    <div id="data">
      <dl>
         [% FOREACH item = data %] 
         [% FOREACH term = item.terms %] <dt> [% term %] </dt> [% END %]
         [% FOREACH defdata = item.data %] <dd> [% defdata %] </dd> [% END %]
         [% END %]
      </dl>
    </div>


  </body>
</html>

这是输出:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN">
<html>
  <head>
    <title>DL Demo</title>
  </head>
  <body> 
    <div id="header">
      <a href="/index.html" class="logo" alt="Home Page"></a>
      <h1 class="headline">DL Demo</h1>
    </div>

    <div id="data">
      <dl>

         <dt> One Term </dt> 
         <dd> One Definition </dd> 

         <dt> Many </dt>  <dt> Terms </dt> 
         <dd> One Definition </dd> 

         <dt> One Term </dt> 
         <dd> Many </dd>  <dd> Definitions </dd> 

      </dl>
    </div>

  </body>
</html>

【讨论】:

  • 我得看看这个,它看起来很有趣。我不知道我是否可以在这个特定项目上走这条路,因为我正在为其编写脚本的盒子安装了特定的包来运行专有应用程序,所以我正在尝试使用已经存在的模块(我不想负责打破了一些东西:) 感谢您提供的信息。
  • @mose,认真考虑使用 CPAN 上的众多模板模块之一。如果您选择一个依赖项较小的应用程序,那么将很容易将其与您的脚本和它使用的任何其他模块一起分发。 IIRC,HTML-Template 没有非核心依赖项(对于 5.8 之后的 Perl)。您应该能够将它与您的其他模块一起放入您的脚本目录并准备好使用。
猜你喜欢
  • 2016-02-04
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 2018-12-14
  • 2012-10-11
  • 1970-01-01
  • 2012-01-16
  • 2015-04-09
相关资源
最近更新 更多