加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl和PHP之间的区别[closed]

发布时间:2020-12-15 21:29:02 所属栏目:大数据 来源:网络整理
导读:我计划学习Perl 5,因为我只使用PHP直到现在,我想知道一些语言如何彼此不同。 由于PHP开始是一组“Perl hacks”,它显然克隆了一些Perls功能。 语法的主要区别是什么?是真的,与Perl你有更多的选择和方式来表达什么? 为什么Perl不再经常用于动态网站?什
我计划学习Perl 5,因为我只使用PHP直到现在,我想知道一些语言如何彼此不同。

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

>语法的主要区别是什么?是真的,与Perl你有更多的选择和方式来表达什么?
>为什么Perl不再经常用于动态网站?什么使PHP得到更多的人气?

解决方法

Perl和PHP比同类更不同。让我们考虑Perl 5,因为Perl 6仍在开发中。一些差异,主题大致分组:

> Perl具有原生的正则表达式支持,包括regexp文字。 PHP使用Perl的regexp函数作为扩展。
> Perl有更多的operators,包括matching(=?,!?),quote-like(qw,qx& c。),exponentiation(**),string repetition(x)和range 。 PHP有几个操作符Perl不,例如error suppression operator(@),instanceof(虽然Perl有Universal :: isa方法)和clone
>在PHP中,new是一个运算符。在Perl中,它是在包中定义的object creation subroutine的常规名称,就语言而言没有什么特别。
> Perl逻辑运算符返回它们的参数,而他们在PHP中为return booleans。尝试:

$foo = '' || 'bar';

在每种语言。在Perl中,你甚至可以通过$ foo || =’default’将$ foo设置为一个值,如果它还没有设置。在PHP中最简单的做法是$ foo = isset($ foo)? $ foo:’default’;
> Perl variable names指示内置类型,其中Perl有三个,类型说明符是名称(称为“sigil”)的一部分,因此$ foo是与@foo或%foo不同的变量。
>(与上一点相关)Perl具有用于标量,数组,散列,代码,文件/目录句柄和格式的单独的symbol table条目。每个都有自己的命名空间。
> Perl允许访问symbol table,虽然操纵它不是为了微弱的心脏。在PHP中,符号表操作仅限于创建references和extract函数。
>请注意,“引用”在PHP和Perl中有不同的含义。在PHP中,references是符号表别名。在Perl,references是智能指针。
> Perl对整型索引集合(数组)和字符串索引集合(散列)有不同的类型。在PHP中,它们是相同的类型:一个associative array/ordered map。
> Perl数组不稀疏:设置索引大于数组当前大小的元素会将所有中间元素设置为undefined(见perldata)。 PHP数组稀疏;设置元素不会设置中间元素。
> Perl支持哈希和数组slices本地,切片是可分配的,它有各种各样的uses.在PHP中,您使用array_slice提取切片和array_splice分配给切片。
>你可以离开argument to the subscript operator在PHP中的一点魔法。在Perl中,你不能省略下标。
> Perl hashes是unordered。
> Perl有大量的predefined and magic variables.PHP的predefined variables有不同的目的。
> Perl has statement modifiers:一些控制语句可以放在语句的结尾。
> Perl通过本地关键字支持dynamic scoping。
>此外,Perl具有全局,词法(块)和包scope. PHP具有全局,函数,对象,类和命名空间scope。
>在Perl中,默认情况下变量是全局变量。在PHP中,函数中的变量默认是本地的。
> Perl通过goto函数支持显式tail calls。
> Perl的prototypes比PHP的type hinting提供了更有限的函数参数的类型检查。因此,原型比类型提示更有限的实用性。
>在Perl中,如果语句是一个表达式(即它有一个值),即使不使用return语句,最后一个求值的语句也会作为子程序的值返回。如果最后一个语句不是表达式(即没有值),例如循环,则返回值未指定(参见perlsub)。在PHP中,如果没有明确的返回,return value is NULL。
> Perl flattens lists(见perlsub);对于未展平的数据结构,使用引用。

@foo = qw(bar baz);
@qux = ('qux',@foo,'quux'); # @qux is an array containing 4 strings
@bam = ('bug-AWWK!',@foo,'fum'); # @bam contains 3 elements: two strings and a array ref

PHP不平铺数组。
> Perl有special code blocks(BEGIN,UNITCHECK,CHECK,INIT和END)被执行。与PHP的auto_prepend_fileauto_append_file不同,每种类型的代码块的数量没有限制。此外,代码块在脚本中定义,而PHP选项在服务器和每个目录配置文件中设置。
>在Perl中,分号separates statements.在PHP中,它是terminates它们,除了一个PHP关闭标签(“?>”)也可以终止语句。
> Perl中的表达式的值为context sensitive。
> Perl中的负下标是相对于数组的结尾。 $ bam [-1]是数组的最后一个元素。 PHP中的负下标与任何其他下标一样。
>在Perl 5中,类基于包,而不像PHP(或大多数其他语言)中的类。 Perl 6类更接近PHP类,但仍然有很大的不同。 (Perl 6是来自Perl 5的different在许多其他方面,但是这是主题)。Perl 5和PHP之间的许多差异是由于大多数OO功能不内置到Perl,但基于黑客。例如,$ obj->方法(@args)被转换为(ref $ obj):: method($ obj,@args)。非详尽列表:

> PHP在方法中自动提供特殊变量$ this。 Perl传递对对象的引用作为方法的第一个参数。
> Perl要求引用为blessed来创建一个对象。任何引用都可以被称为给定类的实例。
>在Perl中,您可以通过软件包@ISA变量动态更改继承。

> Perl支持operator overloading。
>严格地说,Perl没有多行注释,但POD系统可以用于相同的效果。
>在Perl中,//是一个运算符。在PHP中,它是单行注释的开始。
>直到PHP 5.3,PHP对匿名函数(create_function函数)提供了可怕的支持,并且不支持闭包。
> PHP没有像Perl的软件包直到版本5.3,它引入了namespaces。
>可以说,Perl内置的对异常的支持几乎不像其他语言的异常,所以它们几乎看起来不像是异常。你评估一个块,并检查$ @(eval代替try,die而不是throw)的值。 Error Try::Tiny模块支持异常,当您使用其他语言(以及Error’s See Also部分列出的其他一些模块)时。

PHP的灵感来自Perl,同样的方式Phantom的天堂的灵感来自歌剧的Phantom,或者Strange Brew是由哈姆雷特的灵感。在学习Perl时,最好将PHP的行为细节放在心里,否则你会跳起来。

我的大脑现在伤了,所以我要停下来。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读