Learning Perl 中文翻译《Perl 语言入门》,俗称小骆驼书(Llama book)。这本书最近翻了两章左右,我看的是图书馆的中文版的(第五版),感觉很不错,讲的很清楚,并且作者也很幽默,不时插入其中的小笑话让你一点也感觉不到这是一本与程序设计相关的书,这也说明译者的翻译水平很不错。
当算用这篇博客作为这本书的读书笔记,将一些自己感觉不错的内容贴出来,便于自己今后查阅。我在博客空间里上传了本书的英文版第五版。这本书还有一个配套练习_Learning Perl Student Workbook_,不过我一直没有找到电子版的,以后找到再传上来。
- Perl 这个词是什么意思
首先Perl 个是溯写字(backronym),不是缩写字(acronym)。缩写字与溯写字是相对应的概念,缩写字是先有完整写法,然后将完整写法缩写就成了缩写字,这个计算机科学中很常见,如OS–Operating System、GNU–GNU is Not Unix;而溯写字是先有简略写法(简略这个词用在这里可能不准确,因为既然有“简略”自然有“完整”),但时这个写法的含义不是那么明显,然后再将这个这个写法展开成一个有意义的短语。Perl 可以展开成Practical Extraction and Report Language,可以翻译成实用摘录与报表语言;也有人展开成Pathologically Eclectic Rubbish Lister,可以翻译成病态折中式垃圾列表器,这个展开有点搞笑,就像Lisp 般都认为是LISt Processing 的缩写,而有的人却把它展开成Lots of Isolated Silly Parentheses(这种展开方法在GNU 网站的An Introduction to Programming in Emacs Lisp 提到),这样的展开与语言本身的选点有关,加入了一点调侃的味道,呵呵。
Wikipedia 上关于backronym 这个词是这样解释的
[code]A backronym or bacronym is a phrase constructed after the fact to make an existing word or words match an acronym. Backronyms may be invented with serious or humorous intent, or may be a type of false or folk etymology.[/code]
- Perl 与perl 的正确使用
一般来说在写的P 表示的Perl 指的是程序语言,而小写的p 表示的perl 指的则是实际编译并运行程序的解释器。
- Perl 的四个特性
- Perl 很容易。
- Perl 几乎不受限制,几乎没有什么是Perl 办不到的。
- Perl 的速度通常很快。
- Perl 有点丑陋。
- 为什么Perl 的标志是骆驼
这来自于值得尊敬的大骆驼书--《Perl 语言编程》(由Perl 的作者和别人合写的)的封面,上面有一只骆驼。这可能也是_Learning Perl_这本书被称为小骆驼书的原因。
- Perl 掌门人
目前维护Perl 的是一个热心的开发者团队,我们称之为“Perl 5 掌门人”(Perl 5 Porters),Larry Wall 已经不再亲自编写所有 Perl 的核心代码,但它仍然指引开发的方向并作出关键性的决策,就像Linux Kernel的开发一样。
- Perl 适合作的事情
Perl 擅长处理整体来说“约有 90% 与文字处理相关, 10% 与其他事务相关”的问题。
- 关于CPAN
CPAN 是 Perl 综合典藏网 (Comprehensive Perl Archive Network),里面有 Perl 本身的源码、各种非 Unix 系统的安装程序、范例说明、说明文档、扩展模块以及跟 Perl 相关的历史消息,可以说是包罗万象,这个很像 TeX 的 CTAN。
- Perl 的版本
现在是5,Learning Perl 这本书是按 5.10 介绍的,但是在代码中用到版本号是不能写成 5.10 因为 Perl 总是将版本号看作是三位数表示的,所以前导0是不能省略的,在代码中一定要写成 5.010, Perl 的开发人员也太强了吧,版本号都设计成三位数,难道要开发到5.999? 呵呵。
- Perl 注释
Perl 的注释最从井号 (#) 开始,到行尾结束的部分,Perl 中没有像 C 中的注释块。
- Perl 是如何执行的
运行 Perl 程序时,Perl 内部的编译器会先载入整个源程序,将之转换成内部使用的 bytecode,这是一种 Perl 在内部用来表示程序语法树(编译原理上讲过)的数据结构。然后交给 Perl 的 bytecode 引擎执行。
- Perl 中数字的内部格式相同
不论我们写的是整数(如 20)或者是浮点数(如3.1415926),在 Perl 内部总是按“双精度浮点数”的要求来保存并进行运算的。也就是说 Perl 内部并不存在整数值,代码中写的整型常量会被转换成等效的浮点数值。
- Perl 中整数书写时的分节
有时候一个整数很大,如果所有的位写在一起看起来很不方便,所以大多会用一些符号进行3位3位的分节,如61,323,323,300,Perl 中也有这种表示方法,但是分节进不能用逗号,要用下划线分隔。
- Perl 中有乘幂运算(exponentiation)
乘幂操作符以双星号表示,如 2**3 表示 2 的 3 次方。
- 字符串操作
- 句点操作符,用来连接两个字符串
- 字符串重复操作符,用小写字母 x 表示 如”fungo” x 3 得到 “fungofungofungo”
- 数字与字符串之间的转换
Perl 会根据需要,自动在数字和字符串之间进行转换,如何进行转换取决于操作符需要什么类型。
字符串转换为整数时,字符串中的非数字部分会被略过,如“325fungo565” * 2 会得到 650。在极端情况下,完全不包含任何数字的字符串会被转换成零。
- 双引号中的字符串可以进行变量内插
就是说字符串中的所有标量变量都会被替换为该变量当前的值。
- 小骆驼书经典语录
- 几乎第一种标点符号的组合,在 Perl 里都有自己的用途,所以呢,如果哪天你的灵感突然告竭,就让猫猫在键盘上走几个圈,再进行调试吧。 So, if you get writer’s block, just let the cat walk across the keyboard, and debug what results. TO BE CONTINUED……