Perl简介

Perl是一门通用语言,其他语言能做的,Perl基本上也都能做。但Perl在文本处理方面、正则表达式方面一骑绝尘。

如果不使用Perl写通用程序或大型程序,可以将Perl基础部分看作高级Shell脚本语言,很多方面和Shell有相似之处。所以熟悉Linux命令行或Shell脚本的人,对Perl是很有亲切感的。

例如:

# 下面是一段perl代码
$name = "junmajinlong.com";  # 和shell一样,变量也是$开头
print "my name is: $name";   # 和shell一样,双引号里也可以变量替换
                             # 和shell一样,调用函数(命令)可以不加括号

其实,学习过Shell的人应该都会觉得,Shell的语法和特性比较零散,学习过程中基本上是靠强行记忆,它的知识点不够密集,导致不太容易系统性地学好Shell,或者学过之后很容易忘记它的语法和特性。相比于Shell,Perl的通用语法更规范、更密集且更语言化(注:在遵循通用语法的情况下,Perl有非常多的技巧性语法),只要根据Perl的语法规则去学习,就可以系统性地学好Perl。因此,可能让很多人难以置信的是,学习Perl实际上比学习Shell更容易

Perl还支持一行式命令(one-liner),它方便到离谱。在熟悉Perl基础部分以及它的一行式命令写法之后,基本上可以通过一个perl命令取代Linux命令行下的grep、sed、awk、sort、uniq、cut等等一大堆命令。即使你更熟悉、更喜欢这些已经用习惯了的命令,也可以把perl一行式当作和它们一样的通用命令并结合使用。例如:

# 学会perl一行式以前
$ grep aaa | sed bbb | cut ccc | awk ddd | sort

# 学会perl一行式以后
$ perl -e 'xxxx'

# 也可以将perl命令结合其他命令参与到文本处理中
$ sed aaa | perl -e 'xxx' | awk 'yyy'

Perl语言还是一门非常灵活的语言,解决同样一种需求,Perl可能比其他编程语言多很多种解法,即一题多解,或【There's more than one way to do it】。这使得其他编程语言的一些使用者以此为由发起对Perl的语言之战,特别是Python(因为现在用Python的人多),和Perl的灵活相反,Python要规范的多,多数时候是一题一解,即【There is only one way to do it】。有的人喜欢规规矩矩的写代码完成需求,简单轻松,而有的人则喜欢放飞思维写灵活的代码,有趣。

另外,Perl语言大量使用各种各样的符号(如$@{}%_/等),这又使得其他编程语言的一些使用者以此为由发起对Perl的语言之战:丑陋、难读难写难记。其实,这些符号熟悉了之后都一样,甚至有些人(特别是熟悉Shell的人)会认为这些符号很亲切可爱。就像全世界有各种各样的文字,对于语种A,不以之为母语的人都会觉得其他文字符号丑陋、难读难写难记,但以A为母语或喜欢研究A的人不大可能会有这样的想法。

也许在一个团队中用Perl写大型程序不太友好,但是作为个人语言,Perl非常合适。

最后总结一下,只要不带着跟风的偏见去学习Perl,Perl的基础部分很容易掌握,仅靠基础知识,就足够在文本处理任务上大放异彩。