【问题标题】:Advice on coding Perl to work like PHP将 Perl 编码为像 PHP 一样工作的建议
【发布时间】:2010-06-07 05:11:21
【问题描述】:

我首先是一名 perl 编码员,但与许多人一样,我也为客户端工作编写 PHP 代码,尤其是 Web 应用程序。

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

我想做的是开始以一种更像 PHP 的方式编写我的 Perl,这样我 a) 在我脑海中保留一个范式 b) 可以更快地将脚本从一个移植到另一个

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

1) 复现$_SESSION$_GET等的功能。 例如通过包装CGI.pmparam() 方法,一个会话库?

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

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

谁能告诉我哪个 perl 模板引擎(可能还有配置)可以让我进行类似的编码?

3) PHP 函数库 有人知道 perl 的库,它重现了很多 php 内置函数吗?

【问题讨论】:

  • 这听起来像是“我怎样才能让一门好的语言变得更糟并实现糟糕的编码风格?”...你应该尝试将 perl 风格移植到 PHP 而不是 PHP 移植到 perl。 1. => 不要,2. => 对两者都使用模板引擎(即对于 Perl Text::Template (afair) 和 PHP Smarty),3=> 取决于您真正需要的功能。

标签: php perl port


【解决方案1】:

看看EmbPerl

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

涵盖您的具体观点:

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

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

    如果你绝对必须只有来自 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 写入任何内容,Emperl 就会创建一个会话 ID 并通过 cookie 将其发送到浏览器。您写入 %udat 的数据由 Apache::Session 存储。下次同一用户请求 Embperl 页面时,浏览器会发送回带有会话 ID 的 cookie,并且 Embperl 会使用您为该用户存储的相同值填充来自 Apache::Session 的 %udat 哈希。

  • 您包含的模板代码在 EmbPerl 中将如下所示:

    此处为 HTML 代码

    [- 打印出“Hello World!”; -]

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

    此处为 HTML 代码

    [+“世界你好!” +]

    附:我不知道“\b”在 PHP 中的作用,所以我没有克隆它。

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

【讨论】:

    【解决方案2】:

    2) 如果您真的希望您的脚本成为 PHP 中的模板,那么可以使用 Markup::Perl 模块(它源自另一个实际称为 PerlHP 的项目)。对于 Perl 程序员认为的模板引擎,还有其他模块,例如 HTML::Mason。

    3) 在 CPAN 上我找到了 PHP::StringsPHP::DateTime,但我没有使用它们,因此无法为它们担保。

    【讨论】:

      【解决方案3】:

      您还应该查看mod_perlite,它是一个试图模拟 Perl 的 mod_php 行为的 Apache 模块,尽管它的开发似乎已经停滞。更多信息来自README

      【讨论】:

      • 我是贡献者。我没有进一步的承诺,因为该软件适合我,因此我认为它已经完成。 (如果不适合您,请提交错误。)小型软件通常会发生这种情况,因此“停滞”不一定是坏事。
      • 好的,我还没有真正尝试过,但我肯定会。您可能想在网站上指出该项目被认为是稳定且可以使用的,因为第一印象是该项目已被忽视甚至放弃。 “它运行 Movable Type”和“开始测试的时间”对普通访客来说意义不大。
      【解决方案4】:

      我本来打算告诉你爱 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

      【讨论】:

      • 没有我真正想要的答案,但接受的答案最接近。我认为我真正在寻找的是 a) PHP 在页面上混合 html 和代码的方式,并允许您包含可以共享同一会话的其他文件(与 perl 的以代码为中心的模型相反)b) $ _GET、$_POST、$_SESSION 变量。我想我只需要根据上述答案对其进行编码。谢谢大家1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 2017-06-22
      • 1970-01-01
      • 2011-07-10
      相关资源
      最近更新 更多