性共享内存应用以及极度大的应用。
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