Perl是专家级的系统管理员的首选脚本语言,但是它的作用远远不止这些。作为一个设计用于文件和文本处理的语言,除了其他多种用途之外,它还极其适用于UNIX系统的管理、Web编程,以及数据库编程。
作为一门最容易的编程语言,它非常容易上手,能够为简单的任务编写出高效的代码,因此Perl很容易就吸引了新用户,并成为他们完成自己任务的一个常用的重要工具。在正式开始讨论Perl编程之前,有一些你需要知道的东西,它们能够让你在编写代码和向Perl专家求助的时候使编程工作更轻松。
1.Perl不是首字母缩写
Perl有的时候被认为是实用型提取和报告语言(Practical Extraction and Report Language),因为它在提取数据和使用该数据创建的报告上十分好用。它也被滑稽地叫做变态电子垃圾列表程序(Pathologically Eclectic Rubbish Lister),因为你在使用它一段时间之后就会体会出这一点。这两种说法都是“官方的”,也都是正确的,但是这门语言不是PERL。Perl这个名字的出现要比这两种说法的发明要早,而事实上这门语言在拼写上根本就不是一个首字母缩写。在谈到这门语言的时候,要叫它Perl,因为这是用来运行它的命令的拼法。在和Perl黑客对话的时候,认出什么都不知道的新手的最简单方法是把它叫做PERL。
2.完成的方法不止一种
Perl语言和社区的一个主要口号是TIMTOWTDI,发音方法是“Tim Toady”。这个才真的是一个首字母缩写,它的意思是“完成的方法不止一种(There Is More Than One Way To Do It)”。Perl的层次真的有很多,这是你需要记住的重要内容。虽然完成某件事情的某些方法要比完成同一件事情的其它方法更好,但是你可以确信的是,你可以用Perl做很多东西,完成的方法不止一种。
3.使用警告,使用严格的限制
警告和严格的pragma是Perl黑客武器库里的用来调试代码的重要武器。警告不会防止程序被执行,但是会为如何修复代码提供有用的信息。
如果没有使用严格的编程风格的话,例如限定范围的变量,严格的pragma会真正地防止代码被执行。有的时候,一个程序可能不使用严格的pragma会更好,但是如果你刚刚开始使用Perl,那么在你需要相当长的一段时间才能够意识到这种情况,到了那个时候就尽管使用它吧。
在标准的UNIX系统里,在命令行里启动警告和严格pragma的Perl脚本看起来就像下面这样:
#!/usr/bin/Perl -w
use strict;
警告也可以用一个语句来启动,就像下面这样:
#!/usr/bin/Perl
use strict;
use warnings;
在Perl里一个pragma就是一个预处理程序指令。换句话说,它是一条在代码被编译执行之前送到编译器的指令。Pragma改变了编译器分析代码的方式。
4.使用错误检查
通过程序的命令行里的-T参数,你可以明确地启动错误检查。这是一个用来检查程序里所有输入以防止出现“错误”数据的安全手段,如果恶意用户试图破解运行你代码的系统的安全,这有助于保证接收的数据不会允许进行任意代码执行。这在你使用Perl/CGI脚本处理Web页面上HTML的数据时显得尤其重要。它可以与-w参数一起使用,也就是-wT。
5.使用静态范围变量
通过静态范围,你可以使用my()操作符来创建变量。简单地说,这意味着变量的范围被限制到了当前的上下文;如果你在子程序里使用my()声明一个变量,那么这个变量只能存在于子程序里。静态范围的值就是隔开模块代码各个部分的东西。
例如,如果你在使用Perl模块或者库,但是并不确切地知道里面的代码是什么样的,那么使用静态变量就能够有助于防止意外地把新的值赋予需要到后来都一直保持不变的变量。在使用Perl编写静态范围变量的时候,在你的变量中使用静态范围是有其作用的。例如,对于从其他语言转到Perl的人员来说,你可能需要知道静态范围变量,有人还说这些变量是“私有变量”。
6.如何给你的程序命名
Perl程序应该在它们的名字里有一个正确的扩展名。很多质量低劣的Perl说明里简单地把.pl用作所有文件的扩展名,比如把Perl脚本命名为foo.pl等。从技术上讲,.pl扩展名应该被用于Perl的库,而不是可执行的Perl程序。对于可执行文件,你应该使用.plx,或者如果你的操作系统允许,根本就不使用扩展名都可以。Perl模块应该使用.pm文件扩展名。在Perl脚本文件名里只使用字母、数字字符和下划线,用一个字母(或者下划线)作为文件的首字符(这与变量名的首字符类似)都被认为是非常好的做法。
7.如何使用CPAN
综合Perl典藏网(Comprehensive Perl Archive Network,CPAN)已经成为一个寻找免费的、可重复使用的代码的丰富资源。在CPAN里你可以找到大量的Perl模块,它们可以用来增强程序功能,减少编写代码时间。使用CPAN的方式取决于你的操作系统以及Perl分析器的实现,但是你可以使用Web浏览器访问CPAN。Perl的实现一般都带有至少一个命令行工具,用于安装来自CPAN的Perl模块。
8.如何使用Perldoc
Perldoc形式的针对Perl的在线文档数量巨大、内容丰富。把Perldoc安装在你的系统里,你就可以用它来获得任何关于标准的Perl函数、已安装模块、变量,以及其他一些东西的文档——甚至是关于Perldoc 自己的文档!这就是好比是在你的手头放了一套最完整的编程参考书,免费的,可以搜索的,因为它是电子版的。
在某些系统上,Perldoc在默认情况下就会随同Perl一起被安装,而在其他一些系统上,需要你自己动手安装。如果在安装Perldoc的时候碰到了问题,你可以访问Perldoc在线网站。你要确保自己知道怎么使用Perldoc,因为它能够让你更加有效地以意想不到的方式让你成为Perl黑客。
9.不要重新发明轮子
你应该经常使用子程序、模块和库。这有助于更快地编写代码,并有助于防止在你需要在多个程序里使用相同的功能,或者在一个程序里需要多次使用相同功能的情况下代码变得无法管理。这要通过使用子程序、模块和库把代码块与其他的源代码分开来实现。在大多数情况下,你最好使用已经有的设计,而不用重新从草图开始发明轮子。此外,当在重新使用来自子程序、模块或者库的代码时,你或多或少地需要对代码进行一些改进。
在Perl里,“子程序(subroutine)”这个术语大致相当于C语言里的“函数(function)”。
10.正则表达式是你的好朋友
Perl的正则表达式句法能够有助于让你的代码看起来是非门外汉的作品,这就导致有的时候Perl编程的入门者避免使用regexen。这真的是一个大错误。正则表达式为Perl编程语言增添了很大的能力,常常能够让程序用三行代码就完成其他语言用五十行完成的任务。正则表达式是由一些缩写组成的表达式,用于匹配字符串的模式,这些字符串可以被用寻找和操控大字符串里的小字符串。所以Perl黑客有必要学习和熟练掌握regex句法。
使用正则表达式的Perl黑客和其他程序员常常被叫做“regexen”或者“regexes”(单数形式是“regex”)。“regex”的另外一个版本是“regexp”,但是我搞不清为什么有人会加上这么一个让它变得更加难以拼读的字母。
一旦你消化了本文列出这些东西,你就已经准备好真正开始学习Perl以及如何用它来编程了。有一些针对初学者的(也有给专家的)优秀资源,包括《学习Perl》——一篇非常好的介绍性文章,PerlMonks社区——上面有教程和讨论,以及Ovid的CGI课程——介绍Perl/CGI的Web编程。