python和perl哪个好_敢问 Perl 比 Python 好在哪里?

谢 @KE meng邀。不过Python这东西我不熟,所以不太好说太细节的比较。

从我对Python的少量了解来看,Perl大概有这么几个优势:性能稍微好一点,不过十分不显著。而且Perl的Moose对象系统会造成10%左右的性能损失。如果你用Perl构建比较复杂的系统,使用了Moose,那对Python的性能优势应当会被抹回去。

Perl的灵活程度据说比Python要高。

Python用缩进代替花括号作为代码段的标识,有时很坑爹。Perl那种类C的语法会比较容易掌握,也更不容易出错。

不过,其实Perl有几个颇为显著的缺陷:它的内置功能变量使用单字符名,比如$_、$?、$!、$0、$&、$^等等,不利于新手记忆。

Perl的C API非常之坑爹,它是一大坨由宏、自制语言和代码生成器组成的不可名状之物,封装混乱(看起来像是把Perl interpreter内部使用的东西塞给你),文档模糊不清,而且会把干一件事情的逻辑分散在几个离得很远的文件里。我花了很多精力在文档、论坛、博客里面,才弄明白这套玩意的工作逻辑。与之相比,Python的C API我虽然只是大致看过一下,但看起来更符合正常人对一个API的期望。

Perl的模块数量更多,但质量有点坑爹,充分体现了“卧槽这个轮子好烂,看我来造个更烂的”。特别是图表绘制的模块,得有七八个,但就没一个特别好用的。

======想到啥就补充上=====

Perl的变量有个特点,带标识前缀。这样语言就可以设计为允许直接嵌入字符串表达式。比如:

my $value = 123;

say "value is $value";

要是Python,那就必须format:

value = 123

# 旧式的

print "value is %d" % (value)

# 新式的

print "value is {}".format(value)

前者比较清晰。同时,如果需要精细控制,Perl有同样的能力:

my $value = 123;

say sprintf "value is %d", $value;

==== 继续补充 ====

Perl的正则是“嵌入”到语言里的,为正则设计了专门的关键字、操作符、变量,敲起来会比使用名字空间里的东西更快。比如

my $var = "deep_dark_fantasy";

if ($var =~ /(.*)_dark_(.*)/)

{

# 会得到 "my name is Van: deep dark fantasy"

say "my name is Van: $1 dark $2";

}

Perl原生的对象系统是裸奔的:实质上只提供了动态语言最基本的对象概念,将数据绑定到名字空间里,名字空间中的函数就是对象方法。不过Moose系统提供了比较高级的成员、变量、构造器语义:

package PhilosophyGladiator;

use Moose;

has 'name' => (

is => 'ro', # 只读属性

isa => 'Str', # 运行时类型检查,是字符串

default => 'Van', # 默认值

);

sub self_describe

{

my $self = shift;

print "my name is ", $self->name, ".\n";

print "I'm an artist, a performance artist\n" if $self->name eq 'Van';

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值