我见过CGI / Perl的每个例子基本上是一堆包含HTML的打印语句,这似乎不是编写CGI应用程序的最佳方式。有一个更好的方法吗?感谢。
编辑:我决定使用CGI :: Application和HTML :: Template,并使用以下教程: http://docs.google.com/View?docid=dd363fg9_77gb4hdh7b。谢谢!
答案 0 :(得分:17)
绝对(你可能正在看90年代的教程)。你想要选择一个框架。在Perl-land,这些是最受欢迎的选择:
答案 1 :(得分:11)
这是一个非常非常重要的问题。简而言之,更好的方法称为Model/View/Controller(又名MVC)。使用MVC,您的应用程序分为三部分。
模型是您的数据和业务逻辑。这是构成应用程序核心的东西。
View是向用户呈现内容的代码。在Web应用程序中,这通常是某种模板系统,但它也可以是PDF或Excel电子表格。基本上,这是输出。
最后,你有控制器。这有责任将模型和视图放在一起。它接受用户的请求,获取相关的模型对象,并调用适当的视图。
mpeters已经为Perl提到了几个MVC框架。您还需要选择一个模板引擎。最受欢迎的两个是Template Toolkit和Mason。
答案 2 :(得分:10)
暂时离开CGI与MVC框架的问题,你想要的是CPAN的输出模板模块之一。
模板工具包非常受欢迎(CPAN上的Template.pm) 同样流行的还有Text :: Template,HTML :: Template和HTML :: Mason。
HTML :: Mason不仅仅是一个模板模块,因此对于一个简单的CGI应用来说可能有点过于沉重,但是在你决定最适合你的时候,值得研究一下。
Text :: Template相当简单,并且在模板中使用Perl,因此您可以循环数据并在Perl中执行显示逻辑。这被人们视为赞成和反对。
HTML :: Template也小而简单。它为if / then / else处理,变量设置和循环实现了自己的一小组标签。而已。由于与Text :: Template相反的原因,这被视为pro和con。
模板工具包(TT)实现了一个非常大的,可用的模板语言,包括循环和逻辑等等。
我使用HTML :: Template one,发现我想要更多功能。然后我成功使用了Text :: Template,但发现它想要命名空间有点烦人。我已经了解并喜欢Template Toolkit。对我来说,这感觉很对。 您的里程可能会有所不同。
当然,仍然有旧的“打印HTML”方法,有时一些打印语句就足够了。但是你已经想到了将显示器与主逻辑分开的想法。这是件好事。
这是迈向模型/视图/控制器(MVC)的第一步,在这个过程中,您将数据模型和业务逻辑分开(您的代码接受输入,对其执行某些操作,并决定需要输出的内容) ),您的输入/输出(模板或打印语句 - HTML,PDF等),以及连接两者的代码(CGI,CGI :: Application,Catalyst MVC Framework等)。我们的想法是,对数据结构的更改(在模型中)不应该要求更改输出例程(View)。
答案 3 :(得分:5)
Perl5 Wiki提供了web frameworks&的良好(但尚未完整)列表。 templates
“模板”维基条目中链接的比较文章值得一读。我还建议阅读关于PerlMonks的这篇push style templating systems文章。
对于模板,Template Toolkit是我最常用的,可以强烈推荐它。还有一个O'Reilly book,可能是Perl王国中最常用的模板系统(在Web框架内部或外部)。
我越来越多地采用的另一种方法是非模板“构建器”解决方案。 Template::Declare&等模块HTML::AsSubs符合此法案。
答案 4 :(得分:4)
我觉得在Framework / Roll-your-own困境中取得适当平衡的一个解决方案是使用三个关键的perl模块:CGI.pm,Template Toolkit和DBI。使用这三个模块,您可以进行易于编写和维护的优雅MVC编程。
所有三个模块都非常灵活,使用Template Toolkit(TT),您可以根据需要以html,XML甚至pdf格式输出数据。您还可以在TT中包含perl逻辑,甚至可以在那里添加数据库接口。这使得您的CGI脚本非常小并且易于维护,尤其是在使用“标准”编译指示时。
它还允许您将JavaScript和AJAXy内容放在模板本身中,模仿客户端和服务器之间的分离。
这三个模块是CPAN中最受欢迎的模块之一,拥有出色的文档和广泛的用户群。再加上使用这些方法进行开发,一旦您编写了代码原型,就可以快速转移到mod_perl,从而快速过渡到Apache的嵌入式perl环境。
总而言之,这是一个紧凑而灵活的工具集。
答案 5 :(得分:2)
您还可以将表示与代码分开,只需使用模板系统,而无需引入完整框架的所有开销。 Template Toolkit可以像Mason那样单独使用,虽然我倾向于认为它更像是一个伪装成模板系统的框架。
如果您真的想要将代码与演示文稿分开,请注意TT和Mason都允许(甚至鼓励,根据您阅读的文档)可执行代码嵌入到模板中。就个人而言,我觉得在HTML中嵌入代码并不比在代码中嵌入HTML好,所以我倾向于选择HTML::Template。