我对scipting语言(特别是Perl)很陌生,我编写的大部分代码都是将C代码转换为Perl的无意识的努力.
阅读 关于 Perl的,那是经常提到的最大区别事情之一是,Perl是一种动态语言.因此,它可以在运行时执行其他语言(静态)只能在编译时执行的操作,因此可以更好地处理它,因为它可以访问实时信息.
所有这一切都没关系,但是我应该具备哪些特定功能,并且具有一些C和C++经验,在使用Perl编写代码时要记住它使用它具有的所有动态编程功能,以产生一些非常棒的代码?
这个问题足以填满一本书.事实上,这正是发生的事情!
Mark Jason Dominus的优秀高阶Perl 可在线免费获取.
以下是我在第一次读这本书时从喉咙里抓住我的序言的引用:
大约在1993年我开始阅读有关Lisp的书籍,我发现了一些重要的东西:Perl更像是Lisp而不是像C.如果你拿起一本关于Lisp的好书,会有一个部分描述Lisp的优秀特性.例如,Peter Norvig撰写的"人工智能编程范式"一书中包含了一个题为"使Lisp与众不同的内容"的部分.它描述了Lisp的七个特性.Perl分享了其中六个功能; C没有人分享.这些是重要的重要功能,如一流功能,动态访问符号表和自动存储管理等功能.
一系列C习惯不会延续到Perl 5中:
不要将变量声明在程序/函数的顶部.在需要时声明它们.
在声明它们时,不要将空列表分配给数组和散列(它们已经为空并且需要初始化).
不要使用if (!(complex logical statement)) {}
,就是这样unless
.
不要使用goto
破解深嵌套循环,next
,last
,和redo
所有乘坐环路标签作为参数.
不要使用全局变量(这是一般规则,即使对于C,但我发现很多C人都喜欢使用全局变量).
不要创建闭包将执行的函数(特别是回调).请参阅perldoc perlsub
和perldoc perlref
了解更多信息.
不要使用in/out返回,而是返回多个值.
Perl 5活动:
始终使用strict
和warnings
pragma.
阅读文档(perldoc perl
和perldoc -f function_name
).
使用哈希structs
在C中使用的方式.
通过可维护性,开发时间,可测试性和灵活性的最佳组合,使用可解决问题的功能.在特定应用程序的上下文之外讨论任何技术,样式或库都不是很有用.
您的目标不应该是为您的解决方案找到问题.学习Perl比你计划立即使用(并继续学习).有一天你会遇到一个问题,并想"我记得有些东西可能有助于此".
您可能希望看到其中一些书,但是:
高阶Perl
掌握Perl
有效的Perl编程
我建议您慢慢地逐步将新概念引入编码中.Perl的设计使您不必了解很多内容,但您可以在了解更多信息的同时改进代码.试图同时掌握许多新功能通常会让您在其他方面遇到麻烦.
我认为最大的障碍不是动态方面,而是"电池包含"方面.
我认为perl最强大的方面是
哈希:它们可以让您轻松表达非常有效的数据结构
正则表达式:它们真的很好地集成了.
使用默认变量,如$ _
任何未安装标准的库和CPAN
我注意到C转换的东西是过度使用for循环.可以使用grep和map删除许多
perl的另一个座右铭是"有不止一种方法可以做到".为了攀登学习曲线,你必须经常告诉自己:"必须有更好的方法来做到这一点,我不能成为第一个想做的人......".然后你通常可以转向谷歌和CPAN与其数量众多的库.
perl的学习曲线并不陡峭,但它很长......花时间享受骑行乐趣.