我首先是一个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内置函数吗?
答案 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哈希,其值与您为该用户存储的值相同。
您包含的模板代码在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::Strings
和PHP::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
支持。