|
|
1月25日 Perl语言概述
| 1.PERL概述
|
PERL是由Larry Wall于1986年,为了能在UNIX下处理多个文本文件,以便生成报表而
开发的,而且是免费的,比较流行的版本有:4.0或者5.0.PERL是一种解释性语言,与C或C++
不同:它需要一个专门的解释器,用PERL写的程序,由于它被解释器读取,并运行,所以人们
常称之为PERL SCRIPTS(PERL脚本文件),PERL与C等高级语言相比,其最大的优势在于程序
员能够非常轻松的处理和控制文本,功能十分强大.早期的PERL是UNIX下利器,不过现在的
PERL可以运行在很多的平台上,包括WIN9X/NT,MS-DOS等, PERL是最有效的开发WEB程序的
工具之一,无数的WWW网站上,都运行了各式各样的PERL程序.
点这里返回索引 | |
| 2.PERL变量
|
|
|
| 2.1.Perl变量分类
|
Perl变量分为标量变量,数组变量,关联数组变量3类.PERL的变量对大小写敏感,比如:An,
AN,an是3个不同的变量,但是不同类型的变量可以使用同一个名字,比如:VAR可以是一个标量
变量,同时也可以有一个数组变量也是VAR.这是因为PERL对每种类型的变量采用独立的名字空
间,另外PERL的变量,可以存储任何类型的数据,无须像C那样声明变量,数据类型之间会自动转
换,同时PERL变量也有全局与过程变量之分,默认是全局变量.
点这里返回索引
|
| 2.2.Perl变量
|
| 2.2-1.1 Scalar变量(标量变量)
|
标量变量只能存放一个值.PERL中的标量变量名总以字符$开头.下面的PERL语句把9这个
值赋给标量变量$nine.把"BATI"赋给标量变量$name.然后用PRINT语句打印出来.
$nine=9;
$name='BATI';
print($name,'is',$nine);
把上述语句存为TEST01.PL文件,然后再在DOS环境下(WIN9X的MS-DOS方式也可以)运行:
C:\PERL5>PERL TEST01.PL(回车)
BATI is 9
(什么?很眼熟??是阿,PERL和我们常用C就是这么相似)
点这里返回索引
|
| 2.2-1.2 数组变量
|
数组是一次能够存储多个变量的表.它的赋值方法如下:
@weekdays=('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
print (@weekdays); #输出为: SunMonTueWedThrFriSat
print ($weekdays[1]); #输出为: Sun
@work=@weekdays[1..5]; #此时,数组work的值为('Mon','Tue",...,'Fri');
@none=(); #表示空数组
数组变量名以@开头,[]内是数组的下标值,下标值从0开始.这与C依然很相似.
同样的在PERL中,如果只有数组名,而忽略下标的话,也会像C那样输出整个输出,比如:
第一个输出语句.
但请注意在输出Sun那一句时,当我们引用数组中某一个值的时候,我们不再使用@,而是
使用$作为变量的开头,因为就单个值而言,它是一个标量变量,所以如此(这和C可不一样哦)
当然你还得给出下标值.
在给数组work赋值的语句中,我们用到了SLICE初始化数组,你不必关心什么是SLICE,你
只要记住这种形式就可以了,其实SLICE是表格的一部分,是官方的表示.
对数组的赋值是多种多样的.前面我们看到的都是用值对数组赋值,同样你也可以用变量
或者另一个数组的值给数组赋值,比如:
@name=($firstname,@lastname);
@say=('He said',@saysomething);
以下是SLICE的例子:
@weekend=@weekdays[0,6]; #数组weekend的值为('Sun','Sat')
print(@weekdays[1..5,0,6]); #输出结果为'MonTueWedThuFriSunSat'
PERL还支持一种特殊构造符$#var,它是用来返回数组最后一个索引值.比如下面的语句利
用$[构造符确定数组的第一个索引值,用$#var确定数组最后的索引值,然后显示整个数组:
for ($i=$[;$i<=$#buffer;$i++)
{
print $buffer[$i];
}
上面语句与print @buffer;的输出结果是一样的.
点这里返回索引
|
| 2.2-1.3 标量与数组变量
|
表构造符(,)与顺序计值运算符(,)非常相似.因此,PERL调用哪一个运算符取决于命令文件
运行时的具体情况,即文件正在使用数组还是标量值.PERL在数组表达式中调用表结构符, 在顺
序计值中调用计值运算符.请考虑以下两个表达式:
@an_array=(1,2,3,4,5);
$a_scalar=(1,2,3,4,5);
第一个语句初始化一个数组,第二句把$a_scalar变量的值设为5,而且取消了前4个元素的赋
值作用.
再来看一个例子:
print $assoc{1,2};
@print $assoc{1,2};
第一句打印二维关联数组的一个元素值,而第二句打印一维数组的两个元素值.
点这里返回索引
|
| 2.2-1.4 关联数组变量
|
关联数组变量与数组变量很相似,都可以存储标量变量的表.它们的区别在于数组变量必须通
过整数下标来引用数组元素, 而关联数组变量可以通过任何值作为下标而达到访问数组元素的目
的.关联数组的下标我们称之为键值(Key),是一种索引值.下面我们通过一个例子来理解:
$ages{'Bob'}=35;
$ages{'Mary'}=25;
$,='';
print @ages{'Bob','Mary'};
print keys(%ages );
for $name(keys(%ages))
{
print "$name is $ages{$keys}\n";
}
程序把一个值赋给'$,'变量,这样以后的print语句的输出会受到影响,关于特殊变量'$,'我们
将在以后介绍.PERL调用关联数组变量时,使用花括号{}括起键值.
@ages{'Bob','Mary'}在花括号内给出了键值,表示引用一个元素,此语句中有两个键值,表示引
用数组的一部分,其结果应为(35,25)与($ages{'Bob'},$ages{'Mary'})语句的结果相同.
print keys(%ages)使用了keys运算符.其结果将返回关联数组的所有键值,组成一个表.%ages
表示引用整个关联数组.
请注意循环语句中的print语句,在这里我们看到了在""(双引号)中插入变量的用法,这是非常有
用的.在输出结果的时候,变量将被替换成变量的值作为输出的最终结果,这就是所谓的内插法.但是PERL
不允许在''(单引号)中插入变量!!!!
点这里返回索引 |
| 3.PERL运算符
|
| 3.1 算数运算符
|
PERL虽然在变量与数据类型都和C大不相同,然而它的运算符和C几乎相同,除了C的类型
转换运算符type,指针引用运算符*ptr和结构成员选择符,其他C的运算符几乎完全出现在
Perl里,Perl新增了几个新运算符,比如在字符处理方面.
Perl到目前支持的算数运算符有一些几种:
+ 加法运算符
- 减法运算符
* 乘运算符
/ 除运算符(只对浮点数运算)
% 取模运算符(只对整数运算)
下面给出Perl算数运算的一些实例:
$x=2.5;
$y=3;
print ($x+2*$y);
print (7/$y);
print int(7/$y);
print (7%$y);
print (7.5%$y);
Perl还支持递增和递减运算符:
++ 递加
-- 递减
Perl新增了乘方运算符:**,请看下面的例子:
$x=2**3; #2的3次方
$y=2**0.5; #2的平方根
$z=-2**-3; #结果是:-0.125
点这里返回索引 |
|
| 3.2 位运算符
|
位运算符对二进制表达式的整数形式进行处理,运算结果为整数.如果位运算符的操作数是
字符串或分数,Perl首先把它们转换成整数,并用32位长整数形式表示它们.Perl支
持所有的C语言运算符:
| 位或运算符
& 位与运算符
. 位非运算符
<< 位左移运算符
>> 位右移运算符
有关位运算符的详细内容,请参看C语言有关的内容,这里我们就不多讲了,只举几个例子:
$x=5;
$y=3;
print $x | $y; #结果是7(二进制表示:111)
print $x & $y; #结果是1(二进制表示:001)
print $x << 2; #结果是20(二进制表示:10100)
print $x >> 1; #结果是2(二进制表示:10)
点这里返回索引 |
|
| 3.3 比较运算符
|
比较运算符的功能是比较两个操作数的值.Perl在进行比较运算前,会先将字符操作数转换
为数字.Perl用专门的字符串比较运算符对纯字符进行表运算.
| 运算符
| 等价字符串
| 含义
|
|
|
|
| 等于
|
| 不等于
|
| 大于
|
| 小于
|
| 大于等于
|
| 小于等于
|
| 不等于(结果带符号) | |
点这里返回索引 |
|
| 3.4 逻辑运算符
|
逻辑运算符测试布尔表达式的值,其结果为真或假.Perl认为逻辑运算符的每个操作数都
为布尔值(即真或假).Perl的逻辑运算符包括:
|| 逻辑或运算符;
&& 逻辑与运算符.
Perl按从左到右的顺序计算逻辑表达式.当逻辑或运算符的一个操作数为真,或者当逻辑
与运算符的一个操作数为假时,Perl将终止逻辑表达式的计算.Perl利用这种短回路计值
快速计算表达式的值.因此,这两个运算符也叫短回路AND和短回路OR.
除了以上两个运算符,还有以下三种逻辑运算符:
! 负运算符
?: 条件运算符
, 顺序计值符
运算符!否定操作数的布尔值,相当于逻辑非.?:条件运算符,有3个操作数,表达形式为:
condition?true-result:false-result
下面的语句通过?:运算符,实现访问权限的区分:
$access=($user eq '流云'?'root':'guest');
顺序运算符(,)从严格意义上讲并不是逻辑运算符,因为它并不检查操作数的真假.Perl
从左到右的计算逗号运算符,并返回最右边的操作数,都好运算符是从C延续出来的,具体使用可以
参考C里的用法,这里我就不累述了.
点这里返回索引
|
| 3.5 字符运算符
|
由于Perl本身是为文本处理开发的.因此,它增加许多新的字符串运算符.Perl的字符
串运算符包括:
. 字符连接运算符
x 字符串复制运算符
=~ 将一个变量绑定到模式匹配
!~ 将一个变量绑定到模式匹配,取非
前两个运算符比较简单.现在看看例子:
print 'C'.'a'.'l'x2; #输出结果将是: Call;
后两个运算符主要用于模式匹配,以后将会有关于模式匹配的具体讲解,这里就不多说了,我们
来看看它们的例子,以了解它们的作用:
$text='流云是一个笨蛋';
print ($text=~/笨蛋/)?'骂流云':'没有骂流云';
我们看到的例子可以发现是否变量中是否包含我们所需要的字符串.
点这里返回索引
|
| 3.6 赋值运算符
|
赋值运算符和C语言的赋值运算符差不多,以下是各种赋值运算符:
= += -= *= /= %= |= &=
^= ~= <<= >>= **== .= x=
具体什么含义?呵呵,找本C的书看看就知道了.
点这里返回索引 |
引用通告
此日志的引用通告 URL 是: http://mn977.spaces.live.com/blog/cns!D62ACBAFD512A178!353.trak 引用此项的网络日志
|