你是否开始学习Perl,是什么引起了你的兴趣?

12

我多年前开始接触Perl,一直觉得这是一种有趣且表达能力强的编程语言。

我发现使用Perl编程可以提高我的生产力,这是由于它的开销很低,并且在CPAN上有大量现成的解决方案可供使用。

如果你是Perl新手,是什么吸引了你尝试它呢?


怎么回事,为什么要踩我?至少说一下原因吧! - Renaud Bompuis
谢谢Leppie。我认为很合理地想知道人们今天在Perl中看到了什么,使他们开始使用它。 - Renaud Bompuis
这不是Perl的问题,而是问题本身。如果你要提出这样的问题(开放式、讨论性、主观性),那就把它设为社区维基。否则,人们会将其视为试图通过刷声望来操纵系统而将其投票下降。 - George Stocker
把某事物设为社区维基只是为了让人们不会因为玩弄系统而对其进行负面评价,这本身就是在玩弄系统吗? - ysth
@ysth - 不完全是这样。意图并不是为了避免负评;而是只允许您因回答一个“真正”的问题(对于各种真实定义)而获得知识声望,而不是因为您对于$language是否足够“蓬松”来编写天空蓝色等主观看法。它并不完美,但似乎起作用了。负评通常是对非社区维基状态的响应。 - romandas
我认为这个问题很适合程序员社区(programmers.stackexchange.com),但我不知道如何将其迁移到那里。 - reinierpost
14个回答

18

我曾经靠写PHP谋生,后来听说他们将名称空间分隔符从::改成\。我并不是在开玩笑或者出于恶意,但这确实是让我开始转向Perl的原因。

并不是自命不凡,但我突然意识到,我需要与合作的懂PHP的人在编程概念上理解很少,这让我非常沮丧,IRC聊天室里的人已经不再是我的问题解决来源,我通常花费更多的时间回答别人的问题等待有人能够回答我的问题。通常我最终还是自己解决了问题。大多数情况下,我发现人们反复解决同样的问题,而且方法越来越糟糕。

我发现PHP中存在一些问题行为,这些行为违反了逻辑和推理(例如array_merge_recursive系列),并且发现某些函数的使用方法未经记录,当我报告函数中的错误时,我的错误被标记为“虚假”,并且人们期望我能够看穿未来。

我有一个朋友不断宣扬Perl的优点,所以我基本上给它一个机会,现在我就像一个瘾君子沉迷其中。

此外,我在其他高阶动态类型语言(JavaScript和Ruby,是的,JavaScript在语言功能方面比PHP更强大)中的经验使我对许多解决问题的方法有了了解,但被限制在这样的方式下,我没有办法使用这些强大的特性。Perl满足了这个需求。

为什么选择Perl而不是Ruby?我玩过Ruby一段时间,但我的经验告诉我,支持和文档稀缺,语言速度慢且不成熟。它可能很好,但从我看到的情况来看,与Perl相比容量仍然较小。并且它与PHP共享一个主要缺陷,即拥有许多完全不知所措的初学者用户,所有人都用错误的方式完成操作,我真的不想太多地处理这个问题。

成为精英主义者并不好,但是当你尝试向30个人解释相同的事情(每次花费一个小时将简单的概念灌输到他们的头脑中)时,会达到一种沮丧的程度。(我无法应对“互联网上有人是错误的”这种情况,如果我看不到它,那么它就不存在)


+1,完全同意你关于PHP和Ruby的看法。Perl的蜜月期不会持续太久,但它是一种成熟、强大的语言,拥有庞大的知识社区,因此你可能不会像使用PHP时遇到那些障碍。 - Robert Gamble
当我报告函数的错误时,我的错误被标记为“虚假”,并且人们认为我应该有超能力。这是整个回应的缩影,充满了毫无根据的暗示。 - Dexygen
PHP已经远离其Perl的根源,以至于几乎没有任何相似之处。 - Brad Gilbert
3
有趣的是,Rasmus Lerdorf会告诉你PHP并非源自Perl,但他懒得起身修改手册(注:我曾在/.上与他讨论过此事)。 - Powerlord
@George Jempty:你应当学会区分个人经验的描述(这也是这个问题所询问的内容)和一般性的判断。 - reinierpost

11

我在攻读计算机科学专业的第三年开始接触Perl,是在“脚本语言”课程中学习的。我有一个学生朋友在学习生物技术,我帮她开发了一些数据挖掘脚本,用于处理蛋白质数据库(解析文本文件、正则表达式、简单完整性检查),这些都在Perl中非常自然地完成。

后来我得到了第一份兼职工作,需要专业使用它。我负责开发一组批处理脚本,用于处理公司业务逻辑的某些部分,而这正是Perl展现出全部潜力的任务所在。需要从数据库获取数据?没问题,只需去CPAN找。需要自动化维基百科?没问题,去CPAN找。已经创建的模块数量是惊人的,你可以放心,无论什么需求,你都能在CPAN中找到需要的东西。

总结一下,对我而言,Perl是脚本语言中的瑞士军刀。几乎所有的任务都可以在其中完成,并且即使是非常特殊的任务,也有众多附加模块可供使用。顺便提一句,我有提到过正则表达式吗?


9

我在 Perl 社区里的时间并不长,而最初吸引我的是 Larry Wall 的幽默和智慧。诚然,Perl 有它的怪癖,但这门语言来自对事物的理解十分贴近我的观点,所以我对 Python 不太熟悉,Ruby 稍微好一些。

我不做 Web 应用程序,更多地使用 WxPerl 开发 GUI,而且效果很好。我对语言非常感兴趣,包括像 factor、boo、rebol 等较不知名的语言,但总体来说,Perl 是我的首选。因为它具备强大的语法(如果你喜欢,它可以非常函数化),社区也十分活跃,当然还有 CPAN。就像之前说过的那样,Perl 让我有一种舒适感,让我觉得自己在正确的位置上。


9

使用Perl(以及TMTOWTDI背后的表达能力),编程变成了一项创造性的任务。如果我打算有许多else语句,我可以写if($expr) { $statement; },或者如果这更有意义(例如,我喜欢写:

$statement if $expr;),我也可以这样写。

sub doSomething {
    my($toObject, $argument) = @_;

    die "No object specified" unless defined($toObject);
    die "Object invalid: $toObject" unless $toObject->ISA('Example');

    # Do stuff
}

当然,这并不总是最简单、最富表现力的方式;所以我想出了更好的方法来完成手头的任务!)人们抱怨Perl让你写出丑陋的代码;我喜欢Perl,因为它让我编写的代码看起来很漂亮(是的,我可以看到有一个问题,就是有十几个不同的程序员用自己的风格编写代码;但我坚持认为好的作家可以通过不同的主题表达得非常生动和易懂)。

使用其他编程语言,我必须通过抽象层思考(这个Map将如何给我提供Collection,它们的Iterator我可以用来...等等)。而使用Perl,我通常只需要在基本Perl的抽象级别上再加一层。例如,DBI会将数据库结果作为普通的、日常的Perl标量、列表和哈希返回,因此我对这些简单的核心数据结构的所有了解都适用于我使用DBI的每个任务(复杂的数据结构?那就是PostgreSQL的工作!)。

我只用Perl全职工作了一年左右,但这些是我取得的重大胜利,也是我在Java 1.4的集合模型(别问我为什么)折磨了一年后首次全职转向Perl的原因。其他编程语言让我感觉像是在拼图,你必须把所有的模块和包排成刚刚好的样子;Perl就像一个装满乐高积木的盒子,还有一些“特殊”的积木(比如DBICGI.pmTest::*)加入其中。解决任何问题的方法有很多种,Perl可以让你尝试任何一种,并以任何你喜欢的方式尝试。


6

Perl就是它的社区,这也是人们在社交和实际层面上使用它的原因。(请看CPAN和Perlmonks网站,这两个网站可能启发了Stack Overflow。)


1
据我所知,Stack Overflow 上的工作人员中没有人有 Perl 经验,因此它并没有涉及到 Perl。 - Brad Gilbert
哦,好吧,两个不同的人独立地发现了微积分,所以我想任何事情都有可能 :) - J Cooper
微积分是发明的,而不是被发现的。 - Steven A. Lowe

6
在Perl编程中有很大的自由度;你可以编写一些极其难懂的代码,但是只要你对这种语言有了感觉(并学会了如何使用perltidy :-)),不久之后你就会意识到良好编写的perl代码看起来非常漂亮。
有趣的是;我在大学时学习Perl作为我的系统管理员类型工作后成为了全职Perl程序员;现在它是我最强的技能。我将继续使用Perl一段时间,因为迄今为止这种语言已经具备了与我共同成长的多种用途。我在Perl中编写了很多系统软件,并决定为了娱乐而学习Web编程,Catalyst正在等着我。我想尝试新的语言范例吗?Perl可能会支持它。相比之下,当我一度用PHP编程时,我立刻感觉到自己被一个玻璃天花板所限制。

5

我在俄亥俄州南部的一家大型组织中担任技术故障排除员。我不得不学习Perl来保持一些自动化网络文本操作系统的运行,并最终对它产生了一些兴趣。我最终认为自己是一名开发人员,并编写了一些程序来解析一些数据库数据,使一些人的生活变得更加轻松。但是,在阅读了这个网站上的一些帖子并听取了stackoverflow播客甚至开始阅读某人推荐的阅读列表中的Code Complete一书之后,我不再有任何幻想,认为我是Perl或任何其他语言的开发人员。然而,也许有一天我可以成为一个开发者。


嗯,你得意识到很多很多开发者也不做这些事情。Joel 多次评论过,普通开发者不倾向于阅读关于如何提升编程技能的博客或书籍。话虽如此,我也不称自己为开发者。 - romandas

4
简单的语法、强大的脚本功能适用于win32和unix系统,并且完全支持正则表达式!
我的第一份工作是为电气工程师编写大量自动化脚本,从数据日志中提取信息并将其格式化为Excel,有时还需要处理SQL Server。我学习了Perl后,通常可以很快地得到一些有效的结果,所以在制造业领域一切都很顺利。:P

Perl?简单的语法?你一定在开玩笑。 - Robert Gamble
1
这可不是开玩笑。Perl的语法非常简单。你不需要知道所有的东西才能开始使用它。 - Mr. Muskrat
但是当你尝试做一些非平凡的事情时,你不知道的东西会很快咬你。我已经使用Perl编程了大部分的10年时间,而我用来描述Perl语法的最后一个词是简单。 - Robert Gamble
我指的是能够分离不同类型变量的能力,$、@和%。如果您不使用strict,Perl有时可以智能地猜测您想要做什么。这取决于您如何看待它,有好有坏。但这是我长期以来唯一使用的脚本语言,所以我有偏见。 - melaos

4

我曾经在很久以前的shell脚本中使用过awk几次。在一个古老的项目中,我们需要实现TELNET协议连接,于是我用Perl 4快速编写了一个版本。它运行得非常好,我开始真正喜欢这种语言。

后来,我用Perl 5编写了一个完整的商业Web应用程序,包括自己的框架和数据库。我小心翼翼地不使用太多Perl的奇特功能,所以代码看起来更像C而不是Perl。它运行得非常好,性能也很好,代码也很容易扩展。

最近我一直在用Java,但我经常发现自己想念Perl的松散类型和比Java更好的封装能力。我最喜欢的功能是能够直接在配置文件中放置Perl数据结构(数组和哈希表)和代码并执行它们,以及将代码与语法(如数组)绑定。两者都可以产生非常流畅的代码。

保罗


1
有趣的是,我在 Perl 中警惕的一件事情就是缺乏保证的封装性......你永远无法确定某段代码是否会干扰你自己的内部数据。 - reinierpost
Perl很棒,如果你有自律的话。如果没有,或者是一个大型编码团队,那么更严格的语言可能会更好。 - Paul W Homer

2

我开始使用Perl作为嵌入式开发构建过程的增强工具。我们需要根据我们的交叉编译负载开发多样化的输出,而Perl非常适合这个任务。

我们的增强包括浮点数转十六进制、S-record后处理和校验和修改。

虽然这种工作也可以使用许多其他工具完成,但我肯定会推荐Perl用于构建相关工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接