Perl和PHP之间的差异

时间:2010-03-28 22:03:56

标签: php perl

我打算学习Perl 5,因为到目前为止我只使用过PHP,我想知道语言之间的差异。

由于PHP开始是一组“Perl hacks”,它显然克隆了一些Perls功能。

  • 语法有哪些主要区别?用Perl你有更多的选择和表达方式吗?

  • 为什么Perl不再常用于动态网站?是什么让PHP更受欢迎?

6 个答案:

答案 0 :(得分:276)

答案 1 :(得分:42)

当PHP出现时,每个人都对Perl的主要区别印象深刻:

  1. 输入变量已经在全局范围内,没有无聊的解析。
  2. HTML嵌入。只需<?php ... ?>任何地方。没有无聊的模板。
  3. 屏幕上的错误消息。没有无聊的错误日志偷看。
  4. 易于学习。没有无聊的书阅读。
  5. 随着时间的推移,每个人都知道他们不是一个好处,呵呵......

答案 2 :(得分:20)

我注意到大多数PHP与Perl页面似乎属于

  

PHP优于Perl,因为   &lt;在此处插入跛脚原因&gt;

ilk,很少进行合理的比较。

语法方面,你会发现PHP通常比Perl更容易理解,特别是当你没有经验时。例如,在PHP中修剪一串前导和尾随空格就是

$string = trim($string);

在Perl中,它更具隐秘性

$string =~ s/^\s+//;
$string =~ s/\s+$//;

(我相信这比单线捕获和替换稍微有点效率,也更容易理解。)然而,即使PHP通常更像英语,它有时仍然显示其作为低包装的根源例如,{C},strpbrkstrspn可能很少使用,因为大多数PHP dabblers为任何过于深奥的东西编写自己的等效函数,而不是花时间探索手册。我也想知道英语是第二语言的程序员,因为每个人都和Perl这样的东西平起平坐,不得不从头开始学习。

我已经提到了手册。 PHP有一个很好的在线手册,不幸的是它需要它。对于应该简单的事情,例如参数顺序或函数命名约定,我仍然不时地引用它。使用Perl,您可能会发现在开始时您指的是很多手册,然后有一天您会有 a-ha 时刻再也不需要它了。好吧,至少直到你更先进,并意识到不仅有不止一种方式,可能有更好的方法,其他人可能已经做得更好,也许你应该只访问CPAN。 / p>

Perl确实有很多选择和表达方式。这不一定是好事,尽管如果明智地使用代码并且至少有一种您可能熟悉的方式,它允许代码更易读。你会发现自己陷入某些风格和习语,我衷心建议你阅读Perl Best Practices  (早点而不是晚点),以及Perl Cookbook, Second Edition  快速解决常见问题。

我认为Perl在共享托管环境中使用次数较少的原因在于历史上由于安全性和配置问题导致CGI和主机不愿意安装mod_perl的感觉缓慢使PHP成为更具吸引力的选择。然后循环继续,更多的人学习使用PHP,因为更多的主机提供它,更多的主机提供它,因为这是人们想要使用的。这些天来FastCGI提出了速度差异和安全问题,而且在大多数情况下,PHP也会用尽FastCGI,而不是将其留在Web服务器的核心。

无论是否是这种情况,还是有其他原因,PHP开始流行,并且已经编写了大量的应用程序。对于大多数只想要一个带有简单博客或照片库的入门级网站的人来说,PHP就是他们所需要的,这就是主机推广的内容。如果你愿意,应该没有什么能阻止你使用Perl(或你选择的任何其他东西)。

在企业级别,我怀疑你会在生产中找到太多的PHP(并且,请 Facebook 作为一个反例,没有一点,我说 enterprise 级别)。

答案 3 :(得分:9)

Perl用于网站,例如Python和Ruby。也就是说,PHP的使用方式比任何方式都要多。我认为最重要的因素是PHP的易部署性和易用性。

语法上的差异太多,无法在此总结,但通常它有更多的方式表达自己(这被称为TIMTWOTDI,有多种方法可以做到)。

答案 4 :(得分:8)

关于Perl我最喜欢的是处理数组/列表的方式。这是一个如何制作和使用Perl函数(或“子例程”)的示例,它将此用于参数:

sub multiply
{
    my ($arg1, $arg2) = @_; # @_ is the array of arguments
    return $arg1 * $arg2;
}

在PHP中你可以用list()做类似的事情,但它并不完全相同;在Perl列表和数组实际上处理相同(通常)。你也可以这样做:

$week_day_name = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")[$week_day_index];

你必须知道的另一个区别是数字/字符串比较运算符。在Perl中,如果您使用<>==!=<=>等,Perl会将两个操作数转换为数字。如果您想转换为字符串,则必须使用ltgteqnecmp(列出的运算符的相应等价物)先前)。这将真正为您提供的示例:

if ("a" == "b") { ... } # This is true.
if ("a" == 0) { ... } # This is also true, for the same reason.

答案 5 :(得分:4)

我不需要为outis的奇妙答案添加任何内容,我只想向您展示答案:

  

为什么Perl不用于动态   网站经常出现?做了什么   PHP比它更受欢迎?

请先查看一些“工作趋势”网站 - 您可以单独作出判断。

正如您所看到的,perl仍然是领导者 - 但对于不适用于玩具的真实应用程序更为可取。 :)