如何快速了解Perl最新的面向对象功能?

时间:2010-01-21 21:52:05

标签: perl oop

我还没有完成Perl大约8年,现在我正在进入大量利用面向对象Perl的项目,所以我需要重新调整我的Perl技能并快速完成。在过去几年中,我主要做了各种Java开发和一些PHP。我非常擅长OO而且我不是任何偏远程度的新手程序员。

所以这里有一个问题:你们可以推荐哪些最好的资源/网站/实践/方式/书籍来学习我生锈的Perl技能并学习Perl“新方法”?您的建议将不胜感激。

P.S。我确实研究过一些以前的答案。我想强调一点,我不是在寻找新手书籍/资源(语法,核心原理等),而是特别是那些涵盖我在Perl编程时不存在的OOP功能(或者我当时可能会忽略它) )

P.P.S。感谢大家的建议和提示。经过一番考虑后,我跟@MBO一起回答,因为它首次提到了Moose,我到目前为止都非常喜欢。

6 个答案:

答案 0 :(得分:21)

我目前不编写Perl代码(目前我使用的是其他语言),但我不时阅读此网站:http://www.modernperlbooks.com/mt/。另请检查Moose以了解在Perl中定义对象的新方法

答案 1 :(得分:21)

本书"Higher order Perl"可能对您有用。最重要的是 - 它是免费的。

答案 2 :(得分:21)

嗯,首先Higher-Order Perl非常好,但它是关于函数式编程,而不是对象。

Perl Best Practices是一本很好的书,但它有局限性,其中之一是Conway建议使用他自己的Class::Std模块来做内到外的对象,而普遍的共识似乎是( 1)如果你要做内到外的物体,Object::InsideOutClass::InsideOut是更好的方法(2),无论如何,使用“驼鹿”物体是一个更好的方法去

这说明了Java和Perl世界之间可能存在的 主要区别:很少有一种标准的方法可以用Perl做任何事情。从一个对另一种语言的对象感到舒服的人开始,我猜想Conway现在稍微过时Object Oriented Perl的最有趣的事情就是看着他逐渐开发出不同的方式来添加你一直认为理所当然的OOP功能。 / p>

我自己喜欢Perl OOP的基本blessed-hash风格,但你需要明白它的封装非常弱,并且虽然方法继承有效,但通常没有数据继承。广泛使用的还有一些相当流行的技巧,例如使用AUTOLOAD例程自动生成访问器。

至于您可以阅读的有关该主题的内容,请不要忽略Perl附带的在线文档:perldoc。请注意顶部的“教程”部分。如果您对Perl的引用和数据结构不满意,请阅读前两个:perldoc perlreftutperldoc perldsc。在列表中,您将看到多个OOP教程。这些主要是关于简单的基于href的对象,尽管存在一些严重的奇怪之处,例如Tom Christiansen的基于闭包的对象的方案位于底部:perldoc perltoot

如果你对人们做某事的一些新方法感兴趣,你可能希望从Moose开始,它应该是最接近perl6对象的同时仍然编写perl5代码。顺便说一下:忽略那里的“后现代”这个词,这是一个没有任何意义的愚蠢笑话。

如果你对内向外对象感兴趣(它有防弹封装,但可能有点讨厌调试 - 你不能只在对象上使用Data::Dumper来获得它的状态),我建议从这个perl5 wiki page开始。

答案 3 :(得分:8)

退房:

  • Perl Best Practices - 建议的最佳做法的精彩集合。即使您不采用它们,对建议背后的推理的讨论也是有价值的。

  • Perl Testing: A Developer's Notebook - 提供对Perl测试功能的出色报道。

  • Object Oriented Perl - 一本关于如何使用和滥用Perl对象系统的优秀书籍。这本书有点过时了。它早于对象(时间已经过去)和Moose,这两个都是OOP的重要发展。如果你有一大堆旧的OO Perl需要维护,这本书可能会派上用场。

  • PerlMonks - 一个非常方便的Perl焦点网站,非常慷慨和合议的语气。一个寻求帮助和反馈的好地方。它已经运作多年,所以还有大量的帖子存档。

答案 4 :(得分:4)

使用Perl::Critic。阅读Moose和MooseX :: Declare。试试Padre。阅读Perl Iron Man Planet聚合器。

答案 5 :(得分:2)

如果您可以使用Moose那么这是最好的方式(恕我直言)。

有一本书可用:Moose. A postmodern object system for Perl 5

Moose Book

这本书是优秀在线Moose::Manual

的印刷版

/ I3az /