13

我已经开始学习 Perl,但我以前的大部分编程经验都是使用强调面向对象编程的语言,例如 C# 和 Java。我发现的所有 Perl 示例往往都是很长的单函数程序,而且我发现自己编写代码的方式也是如此。是否有任何资源或教程可用于编写可维护的结构良好的程序?

4

9 回答 9

24

首先,无论您在做什么类型的 Perl 编程,您都可能会发现Perl::Critic是无价的。到目前为止,命令行工具是获取代码反馈最方便的工具,但您也有一个Web 界面,您可以在其中上传您的 Perl 代码并接收即时的自动反馈。请注意,Perl::Critic 不会教你良好的结构,但它会总体上帮助改进你的风格,并引导你远离一些常见的错误。

要使用 Perl::Critic,我建议获取一份Perl Best Practices (PBP)。它包含许多 Perl::Critic 所基于的详细信息。即使你不同意书中的特定指导方针,它也会让你思考如何编码,这是非常非常有价值的。您不必花钱买一本书,但两者非常相得益彰,而且您会在 PBP 中找到 Perl::Critic 所没有的冗长讨论。

如果您已经使用过其他 OO 语言和 OO 设计,您可能会发现Moose是一个舒适的过渡。Moose 非常稳定,得到很好的支持,并且拥有庞大而活跃的社区(尤其是通过 IRC)。Moose 取代了几乎所有现有的 OO Perl 建议,包括我自己的建议。面向对象的设计很常见是有原因的。它对很多项目都很有意义,而且没有理由不在Perl 中使用它。

就个人而言,当我转向测试驱动的开发模型时,我发现自己的程序结构有了很大的改进。在这样的模型下,将问题分解成小的、易于测试的单元是必不可少的。如果您不熟悉Perl 测试,请从Test::Tutorial开始,如果您想了解更多信息,请查看其他一些测试资源书籍。使用像Devel::CoverDevel::NYTProf这样的工具来查看您的测试用例正在命中什么以及没有命中什么。拥有难以测试的代码通常是结构不佳的标志。

说了这么多,到目前为止,最好的老师是与经验丰富的贡献者一起参与现有的 Perl 项目。看看他们是如何做事的,当你做出贡献时,想想他们的建议。如果你想要一个真正的应用程序,它具有超棒的价值,似乎已经吸引了 Perl 社区中最优秀和最聪明的人,那么我建议你加入Padre,Perl 编辑器

如果(无论出于何种原因)您无法参与另一个项目,请考虑将代码示例发布到 Stack Overflow 或PerlMonks等社区。更好的是,如果你可以让你的代码开源,那么就这样做,并征求反馈。所有编程语言都最好与已经熟悉它们的其他人一起学习,Perl 也不例外。

愿你用 Perl 做善事,

保罗

于 2009-01-04T06:04:27.630 回答
13

Perl 最佳实践

于 2009-01-04T03:33:13.163 回答
10

如果您正在学习 OO Perl,您不妨继续学习下一件大事并开始学习Moose

Moose 是一个用于 Perl 5 的后现代对象系统,它使编写面向对象的 Perl 变得乏味。它借鉴了 Perl 6、CLOS ( Lisp )、Smalltalk、Java、BETAOCaml、Ruby 等的所有最佳特性,同时仍然忠实于其 Perl 5 根源。

Moose 已 100% 投入生产,并在许多系统中大量使用,并且每天都在增长。

于 2009-01-04T03:30:51.793 回答
7

如果您已经知道如何编写结构良好的程序并且想要编写结构良好的 Perl,那么唯一的障碍是大量古老、粗俗、意大利面条式的代码示例散布在网络上并且拒绝死亡。 ..

忽略示例。或者至少忽略它们糟糕的结构,只关注你需要学习的小的句法部分。

Perl 中没有任何东西会促使您编写糟糕的代码。如果您已经知道如何用其他语言编写好的代码,那么您可以在 Perl 中应用完全相同的原则和实践。这只是纪律问题,就像任何其他语言一样。

于 2009-01-04T15:56:18.233 回答
6

除了上面提到的资料,我强烈推荐 Mark Jason Dominus 的书“Higher-Order Perl”。如果你买得起,就买吧,否则作者把这本书免费放在他的网站上,就像免费啤酒一样,Free Higher Order Perl。对于 PDF 版本:直接下载 URL (1.9 MB)。

编辑:

我忘了提到 Perl 设计模式。PerlDesignPatterns站点是学习 Perl 设计模式的非常好的资源或参考。

于 2009-01-04T09:22:08.857 回答
6

如果您觉得您已经在学习基础知识并想改进程序结构,那么我建议您阅读这些书籍,最好按以下顺序阅读:

  • 中级 Perl —— 这可能是您要问的问题的起点;涵盖开发和使用 Perl 模块(良好结构所必需的)、引用、复杂数据结构、OO 等

  • Perl Medic: Transforming Legacy Code -- 通过展示如何修复结构不良的 Perl 来演示结构良好的 Perl

  • 有效的 Perl 编程:用 Perl 编写更好的程序——经典,但仍然有用;充满 Perl 习语,可以帮助您编写更多 Perl 风格的 Perl;面向对象的内容不多,但涵盖了更基本的编码结构,以使您的代码更简洁,更具表现力。我认为这是一本让我从 Perl 读写到 Perl 流利的书

一旦您熟悉了基本的 Perl 语法,这三个都是最好的,但是如果您仍然开始使用 Perl 但已经有合理的其他语言编程经验,那么它们都不会深入到深奥的高级概念中。

于 2009-01-04T10:55:55.967 回答
2

就个人而言,在我开始学习 Java 之前,我并没有写出好的 OO Perl。我建议您花少量时间用真正的 OO 语言学习 OO,并将您所学的应用到 Perl。

对于一个需要指导的地方,PerlMonks 非常棒

于 2009-01-04T09:01:54.247 回答
0

以编写 C 的方式编写 Perl,尽管您应该利用 BEGIN 块和模块的一些东西。它应该被格式化,使它看起来或多或少像老式的 K&R C 代码。

至于结构,请跳过 OO 的东西并将其样式化为 ADT:

http://en.wikipedia.org/wiki/Abstract_data_type

基本上,您通过使用在 OO 中使用对象的数据结构来做到这一点(并将算法分离到它们自己的函数中)。

然后,只选择一种方式做事并坚持下去,一致性对于可读性至关重要。

如果你能做到这一点,代码既可读又容易理解。

保罗。

于 2009-01-04T03:37:08.303 回答