关于编写Perl的建议就像PHP一样工作

时间:2010-06-07 05:11:21

标签: php perl port

我首先是一个perl编码器,但与许多人一样,也是用于客户端工作的PHP代码,尤其是Web应用程序。

我发现我用两种语言复制了很多项目,但是使用了不同的范例(例如用于处理cgi输入和会话数据)或函数。

我想要做的是开始以更像PHP的方式编写我的Perl代码,以便我 a)我保持一种范式 b)可以更快速地将脚本从一个移植到另一个

具体来说,我在问人们是否可以建议你如何在perl中执行以下操作?

1)重现$_SESSION$_GET等功能。 例如通过结束param() CGI.pm方法的会话库?

2)与PHP类似的模板库 我习惯于在PHP约定中混合我的代码和HTML。 e.g。

<h1>HTML Code here</h1>
<?
 print "Hello World\b";
?>

有人可以建议哪个perl模板引擎(以及可能的配置)允许我进行类似的编码?

3)PHP函数库 有人知道perl库可以重现很多php内置函数吗?

4 个答案:

答案 0 :(得分:6)

看看EmbPerl

这是一个基于Perl的模板系统,它似乎提供了PHP基于我公认的非常小的PHP知识所做的任何事情。

涵盖您的具体要点:

  • $_GET:EmbPerl提供%fdat哈希,其中包含通过POST或GET传递的完整表单数据

    %fdat不区分值是通过POST来源于GET的查询字符串还是表单字段。

    如果你绝对必须只有来自GET的QUERY_STRING的值,这里有一个函数的简单例子:http://urlgreyhot.com/personal/resources/embperl_getting_values_query_string - 虽然你为什么要将GET与POST数据分开,此时我正在逃避。

  • $_SESSION:我不是100%我在PHP中得到了它的功能但是如果我是对的,每个用户数据%udat%mdat用于处理会话内容的每个模块/页面数据。

    在EmbPerl文档的“Session Handling”区域中更详细地描述了使用两者,以及EmbPerl中所有其他多种会话支持

    这是一个快速%udat模糊:

    ...只要您向%udat写任何内容,Embperl就会创建会话ID并通过cookie将其发送到浏览器。您写入%udat的数据由Apache :: Session存储。下次同一个用户请求一个Embperl页面时,浏览器会发回带有会话ID的cookie,而Embperl会从Apache :: Session填充%udat哈希,其值与您为该用户存储的值相同。

    < / LI>
  • 您包含的模板代码在EmbPerl中如下所示:

       <h1>HTML Code here</h1>
       [-
        print OUT "Hello World!";
       -]
    

    或者更为惯用/正确的解决方案,

       <h1>HTML Code here</h1>
       [+ "Hello World!" +]
    

    P.S。我不知道PHP中的“\b”是什么,所以我没有克隆它。

    Embperl支持所有标准模板内容([- -]执行,[+ +]包含任意Perl代码的结果,模板流控制命令([$ if $] /'[$ for $] `等等......)以及更多。它也与mod_perl完全兼容。

答案 1 :(得分:5)

2)如果你真的希望你的脚本是PHP中的模板,那么就有Markup::Perl模块(它来自另一个实际上称为PerlHP的项目)。对于Perl程序员认为的模板引擎,还有像HTML :: Mason这样的其他模块。

3)在CPAN上,我找到PHP::StringsPHP::DateTime,但我没有使用它们,否则无法保证它们。

答案 2 :(得分:2)

你还应该看看mod_perlite,它是一个试图模仿Perl的mod_php行为的Apache模块,虽然它的开发似乎已经停滞不前。来自README的更多信息。

答案 3 :(得分:1)

我打算告诉你爱Perl和PHP的独特自我,但没有。 1让我觉得有点空闲。我的建议是自己编写代码,并将其发布到CPAN。我读了你的问题并想了想:

use CGI::PHPLike qw(:superglobals); # Pull in everything from CGI::PHPLike::Vars

CGI::PHPLike::Config->variables_order 'EGPCS';

...

%_ENV可能只是perl %ENV的别名。 %_REQUEST%_SESSION可能是tied个对象,等等。%_SESSION甚至可以由PHP::Session::Serializer::PHP支持。

阅读CGI spec,然后查看CGI.pm的来源,当然还有CGI::Lite等更简单的模块。