从Python的角度学习Perl

12

我对Python有一定的了解,从系统自动化和工具构建的角度来看;我是一名系统管理员。我最近开始在一家公司工作,该公司希望标准化使用Perl,但我对Perl一无所知。因此,我需要快速掌握Perl的基础知识,并希望有人能够指出一些针对Python开发者/脚本编写者学习Perl基础知识的有用参考资料。我在 这里 找到了关于从Perl转向Python的信息;我需要相反的内容。我购买了 Llama书籍,但还没有开始阅读。有任何意见/建议吗?


8
仅仅购买一本书而不去读它,是学不会 Perl 的。如果你已经懂得 Python,阅读起来不需要花费太多时间。不过,当你读完之后,可能会想要换工作了! - David Heffernan
3
FYI:Perl是这门语言的名称;“perl”是运行Perl脚本的程序的名称。如果您不正确使用它们,我不会是唯一一个告诉您区别的人。 :) - shawnhcorey
3
2011年,在工作场所开始使用Perl,我不会嫉妒任何人。请注意,“to” 是多余的单词,已从翻译中省略。 - Glenn Maynard
3
@Tom - Perl对于混乱的代码有着宽容的处理方式,但它并不会强制你以那种方式编写代码。良好结构和清晰的代码同样能够运行得很好甚至更好。一点自我约束能够带来很大的改善。 - Sherm Pendley
4
哇,今天人们真的很努力想要帮助... - ysth
显示剩余5条评论
5个回答

17
通过Llama(这很容易),完成后请查看 Effective Perl Programming 和/或 Modern Perl,它们将帮助您避免所有那些令人讨厌的1994年编写的教程所鼓励的错误,在网络上似乎仍在引起反响。
请花时间查看Moose,特别是MooseX::Getopt 顺便说一句,我比起Python更喜欢Perl,但我不觉得需要每次提到Python时就把它批评一番。 Pythonista,你们怎么了? 请考虑一下没有任何语言是完美的,也没有任何语言拥有“编程的终极真理”。正如Brooks所指出的,没有银弹。Python有一些很棒的东西,Perl也有一些很棒的东西。Python有一些垃圾的东西,Perl也有一些垃圾的东西。

7
感谢您对最后一段的支持。每个人都有自己的喜好,没有必要为此表现得很刻薄。 - Sherm Pendley
3
对于所有的回答点个赞。《现代 Perl》是一次对 Perl 的美妙之旅。我可能不会推荐 Moose 用于系统管理员工作……尽管也有 Moo,它可以使命令行版本更加流畅和接近强大的代码能力;而且稍后切换也很容易。关于你提到的 BTW:Perl 和 Python 程序员的比较 - Ashley
@Ashely,Moose 在启动时可能有点慢,但在过去的几年里,它已经变得更加出色了。我推荐使用 Moose 和 MooseX::Getopt(以及相关的配置文件模块)来编写任何不是小型一次性脚本的东西,因为它们可以让这些任务中的大部分繁琐工作消失。只需用几行声明代码声明您的脚本/应用程序对象,解析配置文件并用 CLI 参数覆盖它们即可。使用 BEGIN { package Foo; ... } 块将相关对象放入一个文件中,并且您可以快速构建一个功能强大、灵活的脚本。 - daotoad

8

8

一些典型Python习惯用法到Perl的翻译:

  • 列表推导式 [x * x for x in range(10)] 变成 map {$_ * $_} 0..9
  • 过滤器 filter(x > 5, range(10)) 变成 grep {$_ > 5} 0..9
  • 函数 def f(x, y): return x + y 变成 sub f { my ($x, $y) = @_; $x + $y }

对于内置函数的快速参考,我发现 perldoc -f <function_name> 非常有用。

最后,请注意单引号('')和双引号("")字符串在Python中相同,但在Perl中不同!例如,"$a\n"将被插值,即 '$a' 将被变量 $a 的值替换。


1
map {$_ * $_} 1..9 不应该是 map {$_ * $_} 0..9 吗? - Sylvain

6
我曾经因工作需要从Python转向Perl。我也使用了《学习Perl》这本书,它帮助我在一个周末内较好地掌握了Perl语言。
学习Perl最好的方法是阅读这本教材并运用它。如果你想要练习,你可以将你现有的Python项目重写为Perl语言,以加快学习速度。

2

您最好的选择就是阅读《Llama》书籍并完成练习。由于Perl与Python具有某些相似的语法,请确保写的是Perl而不是Python。


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