免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: oyd_admin

为什么说perl是一团浆糊 [复制链接]

论坛徽章:
0
发表于 2007-02-19 22:55 |显示全部楼层
原帖由 awake 于 2007-2-19 13:49 发表


这个是C++代码吗?


呵呵,我仔细再看了看,我引用的并不是C++代码,只是C++允许的一个概念,destructor我记得是用~符号。

论坛徽章:
0
发表于 2007-02-20 16:24 |显示全部楼层

仁者见仁,智者见智

如果楼主不喜欢perl,就不用好了,没有必要在这里骂大街。连一个计算机语言都要垢病,心胸也太小了吧。

论坛徽章:
0
发表于 2007-02-20 17:33 |显示全部楼层
确实如楼上某位所说,我是爱之深,才恨之切的。
perl确实带给我许多便利,如它的正则表达式,几乎是我不愿放弃perl的唯一理由了。
可是perl却不提供一个数组用来存放匹配结果,而只能通过$1,$2这种形式。于是每当我需要的时候,只好用浆糊一样的代码来做:

  1. @a = ();
  2. for (my $i = 1; ;$i++) {
  3.   no strict 'refs';
  4.   last unless defined $$i;
  5.   push @a, $$i;
  6.   use strict 'refs';
  7. }
复制代码


perl据称能用多种方式来做同一件事,却连下面这样通俗的语句也不予通融:

  1. if (something) return 1;
  2. else if (others) { return 0; }
复制代码


这些都能忍受,当最让我受不了的是,当我试图用perl来做一些抽象层次时,我发现我快要崩溃了,在我没写出perl编译器之前,我不指望我能理解perl的包和对象了。

论坛徽章:
0
发表于 2007-02-20 18:57 |显示全部楼层
这些都能忍受,当最让我受不了的是,当我试图用perl来做一些抽象层次时,我发现我快要崩溃了,在我没写出perl编译器之前,我不指望我能理解perl的包和对象了。


或许是先入为主的Java/C++的面向对象的概念害了你,事实上Perl的面向对象系统的简单、优美和强大是我见过最棒的设计之一(我不说是最棒的,是因为我知道lisp的clos也非常漂亮)。所谓面向对象本质上应该是可变数据以及对应的一系列相关函数(从对象本质上是可变数据结构这一点来讲,你应该尽量减少对象的使用,因为可变意味着同一个函数每次应用的结果是不同的,最终你会陷入程序跟踪调试的泥潭中),Perl可以用Hash或者Array等来表示是你的数据,至于相关函数不过是模块函数而已,你可以对Hash做各种查找、批量属性更新、或者使用内省自动为你的属性生成getter/setter函数。。。Perl面向对象可以玩的花样实在是太多了,你在别的地方见到的面向对象技巧在这儿都基本上都有对应的方法,你想都没想到的这儿也有。

推荐你看两本书吧,
Perl面向对象编程(Object-Oriented Perl)
高级Perl编程(第二版)
看了你会为Perl面向对象的优美折服的。

基本上很少有一种语言像Perl这样引起如此多的新手的责难(事实上也有众多高手也对Perl有很多的不满),不过说句实在的,Perl除了长的不像很多人熟悉的编程语言以外好像还没有什么不好。

论坛徽章:
0
发表于 2007-02-20 19:13 |显示全部楼层
原帖由 oyd_admin 于 2007-2-20 17:33 发表
可是perl却不提供一个数组用来存放匹配结果,而只能通过$1,$2这种形式。于是每 ...


Why not?
for example:
perl -le '@a="https://www.pig.com:8080 "=~/(\w+):\/\/([.\w]+):(\d+)/i;print join ",",@a;'
https, www.pig.com, 8080

Here $1,..$3 automatically is pushed into array $a[0],  $a[2].
but slightly different with Php, Python and Java
Php has mathced array, which first element has original string, second element
is ref. to $1, ...

regexp  from Python and Java has learnt from Perl.


-- ulmer

论坛徽章:
0
发表于 2007-02-20 21:32 |显示全部楼层

论坛徽章:
0
发表于 2007-02-20 22:04 |显示全部楼层

回复 45楼 ulmer 的帖子

try this string:

  1. "https://www.pig.com:8080 \nhttps://www.pig.com:8080 "
复制代码

result is

  1. https,www.pig.com,8080,https,www.pig.com,8080
复制代码

How can I split it to two string?
And what about

  1. "https://www.pig.com:8080 \nhttps://www.pig.com:8080\nhttps://www.pig.com:8080 \nhttps://www.pig.com:8080  \nhttps://www.pig.com:8080  \nhttps://www.pig.com:8080 "
复制代码

论坛徽章:
0
发表于 2007-02-20 22:36 |显示全部楼层

回复 47楼 oyd_admin 的帖子

Of course, using different way to process differnet data structure in any language.
for your example (added "\n"), I will firstly consider to use split function.
Every language has own restrict. No language is perfect, even human language!

-- ulmer

论坛徽章:
0
发表于 2007-02-21 00:33 |显示全部楼层
刚刚开始学,还没有很深入的认知,希望能在新的一年中对其有很深入地理解。

想知道他和Python的最大的区别是什么,谢谢。

论坛徽章:
0
发表于 2007-02-21 07:52 |显示全部楼层
Perl和Python最大的区别在于,Perl没有规律,或者说没有很容易总结的规律。所以Perl的语法非常的不一致。很多时候甚至是自相矛盾,非常的荒谬。

Python有一套很小,但是非常一致的规律。因此你可以很轻易地掌握Pytho的规律,而当你掌握规律之后,Python也就水到渠成了。

下面我用一个Python maillist里面的邮件来举例(我可以给你查原文,但是是英文的,老外写的)。有一个IBM的员工,在评价这两个语言的时候写道,他看了Python的手册,大约90页,看完之后他觉得,Python语言已经定义得非常清楚了,没有什么需要补充或者质疑的了。而对Perl来讲,同这本小册子功能比较接近的是Programming Perl这本书。大约1000多页。看完之后,他很怀疑,这本书是不是把Perl全部讲完整了。

这就是Python和Perl最大的区别。

此外,还有一些区别。比如Perl的用户群比Python大,CPAN有很多类库。Python的功能比Perl强。有一些诸如Zope,Twisted这样的Framework级别的东西(Perl缺少这种规模的应用)。

比如,Python的代码一致程度极高。也就是说,如果给定算法,不同的程序员,对于同一个问题,写出的程序是非常类似的。因此Python代码的可读性极佳。当然,这对那些喜欢卖弄茴香豆的四种写法的人来说,未免有些无趣。

比如,很多Python程序员都是从Perl转过去的,几乎没有人是从Python转到Perl的。

最后,Python社区非常的友好,可以容纳不同意见。即便Perler到Python列表大放厥词,Perl版主到Py社区打广告,都没有别删贴,或者改帖子的。相反,Python用户在Perl社区发表如上言论,必定遭到Perler的语言暴力的攻击。此地曾经出现过多次出现过Python用户的帖子被删,或者被改的事情。即便这个帖子,也不能保证能幸免。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP