我在网上研究并发现了几个有趣的Perl模块/框架,比如HTML:Mason,HTML :: Embperl,或MVC Catalyst框架等,它们可以让我在html中嵌入Perl,类似于里面的PHP代码HTML
但是,我的Perl项目必须上传到只提供有限权限和资源的uni服务器。
例如,Apache版本1.3.3& Perl版本5.8.0(低于Catalyst的要求)
我使用脚本检查所有已安装的Perl模块,只有那些名称包含单词“html”:
HTML::HeadParser 2.17
HTML::Entities 1.23
HTML::Filter 2.09
HTML::LinkExtor 1.31
HTML::Parser 3.26
HTML::PullParser 2.06
HTML::TokeParser 2.24
HTML::Tagset 3.03
HTML::Form 0.03
我担心他们中没有一个能让我直接将Perl嵌入到html中。
我知道我可以使用简单的print语句和“heredoc”在Perl / CGI中打印 html页面上的所有内容,但我认为这违反了MVC设计范例,灵活性更低,更复杂开发,主要是因为现在业务逻辑搞砸了html标记。
我目前的解决方案是使用jQuery触发AJAX请求,以便从客户端将html加载到特定标记中。所以在这种情况下,Perl仅用于提供服务器端数据访问,操纵相关数据并提供对AJAX请求的JSON格式响应。
我想知道有更好的方法吗?我几乎无法改变服务器状态,我认为系统管理员不会那么慷慨地安装任何其他Perl模块。
更新信息:
将Perl嵌入到html中的主要原因是我对CGI编程很新,而且由于我对PHP和jQuery更熟悉,我想知道是否有一种正确的方法将Perl直接嵌入到html中,所以我可以很快完成客户端部分并专注于服务器端。
说,像这样:
<div id='user_status'>Your last visit was :[% getLastVisitDateTime($userId)%]</div>
请充分了解我对Perl / CGI的了解,并且非常感谢您的帮助。
第2次更新: 按照Template Toolkit网站说明,我在我自己的MacBook Pro上安装了这个模块,但不幸的是由于许可原因我不能将它安装到uni的服务器上:
Warning: You do not have permissions to install into
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi
at /usr/lib/perl5/5.8.0/ExtUtils/Install.pm line 84.
mkdir /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-
multi/auto/Template: Permission denied at /usr/lib/perl5/
5.8.0/ExtUtils/Install.pm line 137
make: *** [pure_site_install] Error 255
所以不幸的是,我现在正在寻找其他方式......
好吧,出于同样的原因,似乎无法安装HTML :: Mason。因此,我恐怕必须找到.pm唯一的解决方案,这样我就不需要在uni服务器的perl环境中安装任何东西......
答案 0 :(得分:5)
不要将Perl嵌入HTML中。使用模板系统,如Template Toolkit或HTML :: Template。它们可以直接复制到服务器(如果你不使用XS stash for TT)或下载这个操作系统的端口并解压缩。
答案 1 :(得分:4)
如果您确实需要在HTML中嵌入perl,那么可能值得查看Mojo::Template
。
它的简约且非常简单的Perl-ish模板引擎,是Mojo
项目的一部分,这意味着即使在原始的Perl安装中,您只需要做的就是:
<强> 1。下载源代码。使用git的示例(在当前目录中创建 mojo 文件夹):
git clone git://github.com/kraih/mojo.git
<强> 2。并在程序中使用Mojo库。例如:
#!/usr/bin/env perl
use strict;
use warnings;
use lib './mojo/lib'; # git clone here
use Mojo::Template;
my $mt = Mojo::Template->new;
print $mt->render_file( 'simple_template.html', 'Title text', 'Header text' );
使用名为 simple_template.html 的示例模板:
<html>
% my ($title, $header) = @_;
<head>
<title><%= $title %></title>
</head>
<body>
<h1><%= $header %></h1>
<ul>
<% for my $i (1..5) { %>
<li>item <%= $i %></li>
<% } %>
</ul>
</body>
</html>
在新编译的perl 5.12.2中,这对我没有任何障碍。
NB。不要忘记,您也可以免费获得完整的Mojo/Mojolicious网络框架!
免责声明:
与其他答案一样,我通常避免使用嵌入式Perl HTML模块,如Mojo::Template
,Tenjin
,HTML::Embperl
等。我一直倾向于采用更通用的模板系统,如Template Toolkit
。
然而,我一直在越来越多地转向HTML构建器解决方案,有时像推送样式模板模块,就像在这两个问题/答案中一样:
/ I3az /
答案 2 :(得分:3)
管理员无需安装Perl模块。如果您将Perl指向正确的位置,它们可以从任何地方定位和运行。
对于只包含Perl代码(.pm)且没有编译代码的模块,这就像将正确的目录结构中的.pm文件上传到您的网站一样简单。
答案 3 :(得分:1)
如果你有编译器访问权限,并且可以访问主机上的make,那么你可以使用local::lib来避免与系统perl有任何关系。