代码之家  ›  专栏  ›  技术社区  ›  Michael Mao

在html中嵌入Perl的最简单方法

  •  7
  • Michael Mao  · 技术社区  · 14 年前

    但是,我的Perl项目必须上传到uni服务器,在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
    

    我知道我可以用简单的打印语句和“heredoc”一起打印 在Perl/CGI中,但我认为这违反了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>
    

    按照模板工具包网站说明,我在自己的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
    

    所以不幸的是我现在正在寻找其他的方法。。。

    4 回复  |  直到 14 年前
        1
  •  3
  •   Matthew Wilson    14 年前

    对于只包含Perl代码(.pm)而没有编译代码的模块,这就像将正确目录结构中的.pm文件上载到网站一样简单。

        2
  •  5
  •   Alexandr Ciornii    14 年前

    不要将Perl嵌入HTML。使用模板系统,如template Toolkit或HTML::template。它们可以直接复制到服务器(如果您不使用XS stash for TT)或下载此操作系统的端口并解包。

        3
  •  4
  •   Community CDub    8 年前

    需要 在HTML中嵌入perl可能值得一看 Mojo::Template .

    它的简约和非常简单的Perl-ish模板引擎是 Mojo project,这意味着即使在一个原始的Perl安装上,您所需要做的就是:

    使用git的示例(创建 魔咒

    git clone git://github.com/kraih/mojo.git
    

    例如:

    #!/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' );
    

    示例模板名为 简单_模板.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>
    

    在新编译的Perl5.12.2上,这一点对我来说没有任何问题。

    注意。别忘了你也得到了满分 Mojo/Mojolicious


    免责声明

    像这里的其他答案一样,我通常避免使用像 Mojo::模板 , Tenjin , HTML::Embperl 我一直倾向于使用更通用的模板系统,比如 Template Toolkit .

    不过,我已经越来越多地转向HTML生成器解决方案,有时 模板模块,如以下两个问题/答案:

    /I3az公司/

        4
  •  1
  •   singingfish    14 年前

    如果您有编译器访问权限,并且可以在主机上进行访问,那么您可以使用 local::lib 避免与系统perl有任何关系。