genesis脚本编程教材PERL 下载本文

性共享内存应用以及极度大的应用。

Perl语言的长处:

l 强大的正则表达式和模式匹配功能(接近理想的正则表达式语言)

l 复杂灵活的数据结构(Array of Array, Array of Hash,Hash of Array, Hash of Hash等)

l Unicode支持(相对AWK与C)

其不足是:

l 动态类型语言,不是很可靠

l 自然语言,是优点也是缺陷,使得Perl语言代码可能晦涩难懂;

l 智能语言,是优点也产生不足:根据上下文解释编程者之意,可能产生臆断;也因此产生种种编程陷阱。

l 不是很优美。多种方法做事,有时会让编程者无所适从。

l 性能问题。Perl灵活的数据结构和处理性能通常不是很高(相对C/C++),若需要高性能的处理有时需要使用其它语言重写。

Perl语言的学习曲线浅而长。只要看看《Learning Perl》,就可以编写简单的Perl程序了,然而要深入掌握Perl,要使用Perl的复杂数据结构,进行面向对象编程、多线程编程则不是那么容易的事,需要很长的时间学习和实践。 概览

Perl有以下几种数据类型:标量(Scalars)、 数组(Arrays)、关联数组(Associative Arrays,或称Hash)、子程序(Subroutine)和Typeglob(*标识,指所有以上几种类型)。这些类型都有不同的符号标识。这些类型的说明如下: Type

Character Example Is a Name for Scalar $

$cents

An individual value(number or string) Array

@ @large

A list of values, keyed by number Hash %

%interest

A group of values, keyed by string

Subroutine & &how

A callable chunk of Perl code

Typeglob *

*struck

Everything named stuck

(以上引自《Programming Perl》)

关于Perl的类型可以做如下说明:

l 不同的数据类型不同的命名空间,所以三种的标识符可以相同但互不干扰,即$array, @array,%array是完全不同的三个变量。

l Perl的数据类型是大小写敏感的;直接使用,不用声明(这一点可能成为缺陷,可以使用use strict语句强制必须声明)

l 引用(references)是Perl 5引进的一种特殊的标量。

l 变量的命名以下划线或字母开头,可以是任意长度(1-251)。

l 文件句柄(Filehandle)指给一个文件、设备、Socket或管道的名称。

l 子程序相对其它类型是动词(其余为名词),较为特别,将用特别的一章详细说明

命名空间(Namespaces) Perl有两种命名空间,分别是符号表(symbol tables,也称为包(package))和词汇范围(lexical scopes,可以理解为局部空间)。符号表是存储全局变量的全局关联数组(包括存储其它关联数组),词汇范围是无名的空间,不存在于任何符号表中,而是与你程序中的一段代码块相关联。它们包含只对该代码块可见的变量。以our定义的变量存在符号表中,又称为全局

变量或包变量(它们对包来说名义上是私有的,但是由于包本身是全局的,所以又是全局的),以my定义的变量存储在词汇范围中,也称为局部变量。

在任一命名空间中,任一变量类型都有其子命名空间(由其前面的字符决定),用户可以给标量、数组、关联数组、文件句柄、子程序名、标号起相同的名字。Perl的保留字也不会与变量名冲突。

Perl做名字查找的次序如下:

l 查找最小一级的包含的程序块,看变量是否在同一块中声明(my或者our)

l 查找更高一级的包含程序块进行查找

l 查找整个编译单元看是否有声明

l 如果没有找到,Perl将假定变量是包变量

l 如果没有包定义,Perl将在无名的最高层包(main)中查找,$::bert等同于$main::bert

除了用my与our声明变量外,Perl中还有一种local的声明方式,注意local不是声明一个局部变量,而是使全局变量局部话,如果声明时未赋值,则所有的标量被初始化为undef, 所有的数组与关联数组被初始化为()。其使用方式比如:

if ($sw eq ‘-v’) {

local @ARGV = @ARGV;

unshift @ARGV, ‘echo’;

system @ARGV;

}

又如当需要输出CSV格式的文件时可以使用local $, = “,”; local $/=”\\n”; 免得每次print都得写许多”,”和最后的”\\n”;

标量(Scalars)

标量是一个字符串、数值或者指向某类型的引用。

Perl的数值常量可以如下使用:

$x = 12345; #整数

$x = 12345.67; #浮点数

$x = 6.02e23; #科学计数法

$x = 4_294_967_296; #因为,是分隔符,所以4,294,967,296不能成立,Perl用_代替

$x = 0377; #八进制

$x = 0xffff; #十六进制

$x = 0b1100_0000; #二进制

Perl的字符串常量通常由单引号或双引号括起来。双引号支持变量和转义字符序列替换;而单引号只支持两个转义字符 \\’和\\”。双引号支持的转义字符如下:

Code Meaning \\n

Newline (usually LF) \\r

Carriage return (usually CR) \\t

Horizontal tab \\f

Form feed \\b

Backspace \\a

Alert(bell) \\e

ESC character \\033

ESC in octal