马楠 的个人资料The colorful day照片日志列表更多 工具 帮助

日志


1月25日

Perl语言概述

索引:
1.Perl概述
2.PERL变量
3.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用专门的字符串比较运算符对纯字符进行表运算.
运算符 等价字符串 含义
==
!=
>=
<=
<=>
eq
ne
gt
lt
ge
le
cmp
等于
不等于
大于
小于
大于等于
小于等于
不等于(结果带符号)


点这里返回索引
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的书看看就知道了.
点这里返回索引

评论

请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。

若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


还没有 Windows Live ID 吗?请注册

引用通告

此日志的引用通告 URL 是:
http://mn977.spaces.live.com/blog/cns!D62ACBAFD512A178!353.trak
引用此项的网络日志