perlCGI指令简介及规范.docx_第1页
perlCGI指令简介及规范.docx_第2页
perlCGI指令简介及规范.docx_第3页
perlCGI指令简介及规范.docx_第4页
perlCGI指令简介及规范.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PERL CGI简介及指令示范 摘自蔡奇玉、连振汉、张志强著CGI编程指南第六章 为尊重作者版权,只作部分节选,以作推介之用, 推荐您购买原书阅读! 6.1 Perl语言简介 6.2 如何使用Perl来写程序 6.3 Perl语法介绍 6.3.1 Perl语言的变量 一、纯量变量(Scalar Variables)的用法 二、数组(Arrays)的用法 三、关联数组(Associative arrays)的用法 6.3.2 Perl在CGI程序设计中常用的函数 # print printf chop split keys values reverse sort length substr index push pop unshift shift join grep hex rand localtime die open close pack read exit 6.3.3 Perl语言的运算符号字符 一、赋值(Assignment)运算符 二、算术(Arithmetic)运算符 三、数值(Numeric Values)关系运算符 四、字符串(StringValues)关系运算符 五、逻辑(Logical)运算符 六、其他常用的运算符 区块运算符 条件运算符 七、常用的文件数据(File test)运算符 6.3.4 Perl语言的流程控制 一、选择性流程控制 if 假如 unless 假如非 二、循环流程控制 while 当 do while 当. untile 直到.才 do until 直到.才 for 循环陈述 foreach 循环陈述 last 退出循环陈述 next 到循环的下一个陈述 6.3.5 Perl语言的文字处理模式 一、文字处理(RegularExpression)的常用语法 二、文字处理模式(RegularExpression)的简单范例 三、文字处理模式(Regular Expression)相关的运算符及函数 /pattern/文字运算 =相配运算符 !不相配运算符 tr转换函数 s取代函数 6.4 Perl for Win32 简介 6.1 Perl语言简介 Perl(Practical Extraction and Report Language)叫做文字分析报告语言。 是由劳利华尔(Larry Wall)所建立出来的语言。他设计Perl时的哲学是以实用为 第一优先,也就是语言容易使用,有效率,而且完整。Perl语言中包含了C、C+、 shell script、sed、awk这几个语言的语法,它原始的目的就是用来取代UNIX原来 sed/awk与script的组合,用来汇整信息,产生报表的一个工具程序语言。且随着版 本的改进,功能越来越强,现在的功能已经超乎原先设计时的想象,几乎任何事都可 以做到,也变成每一部工作站必备的标准工具了。因为它对字符串与数据剖析方面 有很强的处理能力,尤其是利用关联性数组来作CGI应用程序剖析输入数据串,可以 说是一个功能强大的语言! Perl这个解释式的语言对国内的使用者来说可能都很陌生,甚至可能听都没听 过,为什之要用Perl来写CGI应用程序呢?因为Perl有很强的字符串处理能力,在国 外很多处理数据库的软件可以用Perl来沟通。在Perl5.0版本中还增加面向对象的 用法、增加对字符串的处理能力、可以把整个文件当成一个字符串来处理、不受任 何数据的大小限制而只受存储器的大小、能够处理DBM数据库格式的数据也能够处 理二进制的数据等等,更重要的是Perl还可以在Unix、WindowsNT、Windows95、 Dos、Linux、FreeBSD、OS2、Macitosh等操作系统中使用。目前还可以用Perl来和 一些数据库软件沟通,在国外一些功能强大的CGI应用程序几乎都是用Perl语言来当 主角!读者看到这里一定会觉得功能这样强大的语言Perl一定很难学!这您就大错特 错啦,Perl是很容易上手的,它的语法和C语言很接近,对于原本熟悉C语言的人来说 ,Perl是很容易上手的,只要有一点C语言的基础,再加上几个小时的学习时间就可以 很轻易地用Perl语言写一个简单的CGI应用程序,至于那些没有C语言基础的人,只要 多花一点时间来学习,也是可以很快地使用Perl语言来写CGI应用程序!那时候,您就 会发觉原来Perl是那么的平易近人,而写出来的CGI应用程序也是那么地简洁有力, 笔者相信Perl语言在CGI程序设计的舞台上一定是扮演着最佳男女)主角的角色。 在本章中先介绍Perl语言的语法,而在下一章中会介绍如何在Unix操作系统下 使用Perl来写CGI应用程序,最后会在第8章中介绍如何在Windows95、WindowsNT这 些32位操作系统中使用Peri来写CGI应用程序。求知心切的您,是不是迫不急待地想 知道Perl的功能是多么的强大呢? 6.2 如何使用Perl来写程序 如果在系统中已安装了Perl的话,我们可以用“which perl”,或是“which perl5这个指令来得知Perl是位于系统的哪一个目录下。 %which perl /usr/bin/perl 或是 %which perl5 /usr/locaiAin/per15 之后就可以利用Perl来写程序码了。如果想知道Perl版本的话,可以用“ perl-v”或“perl5-v”,这个指令来得知Perl的版本。目前Perl的最新版本是5.x 版,而以下所介绍的语法指令都可以在Perl4和Perl5版本中执行。如果不幸在工作 站上找不到这个软件的话,可以向系统管理员要求安装这个非常实用的软件。 接下来可以在工作站使用系统的文书编辑器(例如:vi、Joe、pico等等)来编辑 程序码,在程序码的第一行一定要加上#!/path/per1程序起头宣告。例如,用“ which perl这个指令来得知/usr/bin/perl这个路径文件名,所以在写程序码的时 候,一定要在程序码的第一行写上#/usr/bin/perl这一行程序起头宣告,这样系统才 知道要到哪一个路径下用哪一个执行文件来执行这个写好的程序码,接下来就可以 在这个文件中写程序码了。这是Perl语言(解释式)和C语言(编译式)在程序写作中 最大的不同点。在C语言中是把原始程序码编译而成一个执行文件就可以在系统中 执行,而Perl语言就要在原始程序码的第一行使用#!再加上Perl的绝对路径和文件 名称,以便告诉系统要使用Perl这个解释器来解释这些原始程序码。 在写完程序码之后,一定要把文件属性改成可执行,例如可以把文件属性更改成 每个人都可以执行(chmod 711 filename)。不过,一般我们在写CGI应用程序的时候 ,为了避免其他错误的发生,最好把CGI应用程序的文件属性更改成每个人都可以有 读取、执行的权利(chmod 755 filename)。 而#这个符号在Perl语言程序码中是代表注解的意思,Perl不会去处理这一行的 叙述,所以在以下的范例中,如果出现这个符号的话,是代表笔者对于程序码的说明 ,在此先向读者说明一下。 6.3 Perl语法介绍 为了让大家对Perl语言有更深刻地了解,在介绍CGI应用程序之前,先来介绍 Perl的基本语法,笔者先在本章中简单扼要地替大家介绍Per1语言在CGI程序设计中 最常用的语法函数,希望大家在看完这一章节之后,能够了解Perl语言是这么容易上 手。只要把这些基本语法熟悉之后,就可以得心应手地用Perl来写CGI应用程序。 6.3.1 Perl语言的变量 Perl的变量基本上有三种即纯量变量(ScaiarVariable)、数组(Array)、关联 数组(Associative array),而以下是这些变量的使用方法: 一、纯量变量(Scalar Variables)的用法 在Perl语言中变量的使用不像在C语言中还要事先宣告,在使用纯量变量的时候 要先加上$这个符号,要注意的是如果指定的纯量变量是一个字符串的话,就要加上 这个双引号符号了。如果是一个数值的话,就不用加上这个符号了。以下是一 些范例: $Strl=www; #将www这个字符串指定给$Strl这个纯量变量; $str2=cgi; #将cgi这个字符串指定给$str2这个纯量变量; $str3=$strl.$str2; #.就是把两个字符串连起来,所以 $str3=wwwc20; $int=5; #将5这个数字指定给$int这个纯量变量; $int=3+2; #此时$int=5; $int=3*2; #此时$int=6; $int=l0;$int+; #此时$int=10+l=11; $int=l0,$int+=5; #此时$int=10+5=15; 二、数组(Arrays)的用法 在使用数组的时候要先加上这个符号,以下是一些范例: namel=(tom,mary); #将tom,mary这两个字符串指定给数组 name1 name2=name1; #此时的name2=(tom,mary) pame3=(john,name1); #此时的 (name3=(john,tom,mary) ($one,name4)=name3; #此时的$one=john,而 name4=(tommary) namel=0; #此时name1为一个空数组 int=(1,3,5,7,9); $x=int; #将一个数组指定给一纯量变量,就会返回数组元 #素的个数,所以此时的$x=5 $x=$#int; #$#这个变量会返回数组最后一个元素的index #所以此时$x=4 ($x)=int; #$x等于数组int的第一个元素的值, #所以此时$x=1 $b=$int0; #$b等于数组int的第一个元素,所以$b=1 $C=int0; #$c也是会等于数组int的第一个元素,所以 #$c=1,因此要呼叫数组中的值有以上两种方法 $int0=2; #将2这个数值指定给数组int的第一个元素 #此时int=(2,3,5,7,9); $int0,1=1,3; #将1指定给数组int的第一个元素,且将3指 #定给数组int的第二个元素的,所以 #此时int=(1,3,5,7,9); int0,1=int1,0; #将数组int的前两个元素交换 #此时int=(3,1,5,7,9) ($int0,$int1) #也是将数组int的前两个元素交换 =($intl,$int0); #此时int=(1,3,5,7,9); data=int0,l; #此时date=(1,3); $int5=11; #将11这个数值指定给数组int中第六个元素 #此时int=(1,3,5,7,9,11) 三、关联数组(Associative arrays)的用法 关联数组也是数组的一种,是由不同的纯量变量所组成。不过和数组不同的地 方是在关联数组中的元素是由成对的key-value所组成的,也就是每一个key都有一 个相对应的值(value),这是在Perl语言中特有的语法,所以初学者对于关联数组可 能会比较陌生一点,笔者会在这里作比较详细的说明。如果能够将关联数组的语法 应用在CGI程序设计中,就会发现关联数组是一个很好用的语法。 在使用关联数组的时候要先加上%这个符号,而关联数组的格式如下: %ARRAY=(keyl,value1,key2,value2,key3,value3.); 每一个key都有一个相对应的值(value)。 l.在关联数组中增加、更改一对数据: $ARRAYkey=value; 在关联数组ARRAY中加上一对key-value,要先在关联数组名称前加上$这个符号 ,而且key的名称要在符号之间,最后再指定key所对应的value值。如果在这个关 联数组中已经有这个key了,就会更改这个key所对应的value。 2.取出关联数组中key所对应的value: $get=$ARRAYkey; 取出在关联数组ARRAY中key所相对应的value,要先在关联数组名称前加上$这 个符号,而且key的名称要在符号之间,就会将key所对应的value取出来并指定给 $get这个变量。 3.删除一对在关联数组中的数据: delete $ARRAYkey; delete是Perl所提供的函数,作用是删除关联数组中的一个key以及这个key所 对应的value。使用方法是在delete函数之后,再指定关联数组中要删除key的名称 。以下是有关关联数组用法的一些范例: %NAMES=Ione,2two); $one=$NAMES1; #此时$one等于one $two=$NAMES2; #此时$two等于two $NAMES3=third; #增加一对key-value到关联数组NAMES中 #此时%NAMES=(1one,2two,3third); $NAMES3=three; #因为在关联数组中已经有3这个key了,所以就 #会把key为3所对应的value更改成three #此时%NAMES=(1one仰,2two,3three); delete$NAMES3; #将关联数组中key值为3的一对key-value删除掉, #此时%NAMES=(1one,2two), X=%NAMES; #将关联数组NAMES指派给数组X #此时X=(1one,2two); %Y=x; #将数组X指派给关联数组Y #此时%Y=(1one,two); %NAMES=(); #此时%NAMES为一个空的关联数组 6.3.2 Perl在CGI程序设计中常用的函数 - - 指令:# 说明:注解符号Remark宣告 范例:#本程序是一个示范注解说明 - - 指令:print 语法一:print Filehandle LIST 说明:这个Filehandle可把它看作在I(Input)/O(Output)间的一个桥梁,可以利用 Filehandle来做出数据读入写出的动作。stdin是代表从哪边输入数据,例如从电脑 的键盘输入,stdout是代表从哪边输出数据;例如从电脑的屏幕输出;stderr是代表 从哪边输出错误的数据,例如从电脑的屏幕输出。而在Perl语言中有三个标准的 Filehandle: (一)STDIN(标准输入):是代表stdin的Filehandle (二)STDOUT(标准输出):是代表stdout的Filehandle (三)STDERR(标准错误输出):是代表stderr的Filehandle 如果要使用其他Filehandle的时候,就要用open这个函数来打开一个 Filehandle,我们可以用print这个函数把LIST的数据输出给Filehandle。在为大家 介绍print这个函数之前,先让我们来看看print函数中特殊打印符号字符: 符号 内定含意 n 换行New Line r 光标换行Return t Tab键 f 换页Form feed b 退回一键Backspace v 垂直Tab键 a 响铃Bell 07 十进制ASCII码 xff 十六进制码 c 控制字符 范例: print STDOUTi love perln; 将“i love perl再加上换行显示于屏幕上。 - - 语法二:Print LIST 说明:如果省略Filehandle的话,就会把Filehandle内定为STDOUT。也就是会将 LIST的数据内容显示于屏幕上。 范例: $Str1ng=perl; printi love $stringn; 会将“i love perl”再加上换行显示在屏幕上,而如果要让双引号内的变量失 效的话,可以在变量前面加上这个符号。例如如果是print“i love $string”; 的话,就会显示出“i love $string”这个字符串。 - - 语法三:print 说明:同时省略Filehandle和LIST的话,就会以STDOUT为Filehandle,并会输出$_这 个内定输出变量的数据内容。如果$_变量是一个空字符串的话,就会显示出一个空 字符串。 范例: $_=i love perln; print; 就会将i love perl再加上换行显示在屏幕上 - - 指令:printf 语法一:printf Filehandle LIST 说明:在perl语言中也提供C语言中printf的语法,用法和C语言中的用法一模一样。 如果把Filehandle省略的话,也一样会把STD0UT当成是内定的Filehandle。在为大 家介绍printf函数之前,先让我们来看看printf函数中变换符号的字符: 符号 内定含意 %c 字符 %s 字符串 %d 整数 %f 浮整数 %h 十六进制码 %o 八进制码 范例: printfchmod%d%sn,7l1,cgi); 会将“chmod 7ll cgi”再加上换行显示于屏幕上。 - - 指令:chop 语法:chop($string) 说明:把最后一个字符删除掉,常常用这个函数把换行的字符(n)删除掉。 范例: $string=hello!n; chop($string); #此时$string=hello!; 而这两行也可以写成chop($string=hello!n); - - 指令:split 语法:split(/pattern/,$string,limit) 其中/pattern是文字处理的模式,在下一小节中会有详细的语法介绍。而 limit是代表要分割的个数,可以省略。 说明:用一个指定的文字处理模式来分割$string字符串。 范例: $string=i;am;cute; list=split(/:/,$string); #此时list=i,am,cute); ($a,$b,$c)=split(/:/,$string); #此时$a=i,$b=am,$c=cute; list=split(/:/,$string,2); #此时list=(i,love); 在传送CGI应用程序数据的时候会先将数据编码,其中会将FORM中每个数据字段 的数据内容用&这个符号隔开,所以在解码的时候就要以&这个符号为分割的字符,将 每个数据字段分割出。例如: $string=who=A&email=B; list=split(/&/,$string), #此时list=who=A,email=B); 而数据字段的名称和这个数据字段的值是用=这个符号来隔开,如果想取得数据 字段的名称和所对应的值的话,就用要=这个符号来分割数据字段,例如: $list=who=A; (0$name,$value)=sp1it(/=/,$list); #此时$name=who;$value=A; - - 指令:keys 语法:keys(%ARRAY) 说明:取出关联数组%ARRAY中全部的key。 范例: %NAMES=(1,one,2,two); list=keys(%NAMES), #此时list=(l,2); - - 指令:values 语法:values(%ARRAY) 说明:取出关联数组%ARRAY中全部的value。 范例: %NAMES=(1,one,2,two); list=values(%NAMES); #此时list=(one,two); - - 指令:reverse 语法:reverse(array) 说明:将数组array中的元素由后到前重新排列。 范例: list=(A,B,C,D); 1ist=reverse(list); #此时list=(D,C,B,A) - - 指令:sort 语法:sort(array) 说明:将数组array中的元素由小到大排序,如果要由大到小排序的话,就要再加上 reverse这个函数。 范例: array=(b,c,a); array=sort(array); #此时array=(a,b,c); array=(reverse sortarray); #此时array=(c,b,a); 这个语法也可以写成array=(reverse sort(array); number=(l0,3.20); number=sort(number); #此时number=(l0,20,3); 由上个范例可以知道如果要sort函数来排 序数值的时候,就会出差错,因此要用下 面这个方法才能正确地使用sort函数来排序。 number=(sort$a$bnumber); #此时number=(3,10,20); - - 指令:length 语法:length($string) 说明:求出一字符串$string的bytes值。 范例: $string=Perl; size=length($string); #此时$size=4; - - 指令:substr 语法:substr($string,offset,length) 其中offset代表起始字符的位置,length代表引用的字符串长度,如省略 length的话代表从起始值到字符串的最后一个字符长度。而offset如果是负值的话 ,就会从字符串右边开始取出指定的字符串。 说明:在一字符串$string中取出想要的字符串。 范例: $x=substr(testing,2,2); #此时$x=st; $x=substr(testing,2); #此时$x=sting; $x=substr(testing,-2,2); #此时$x=in; - - 指令:index 语法:index($string,$substring,position) 其中$substring是指要寻找的字符,position代表要从哪一个位置开始找起,如 省略position的话就从头开始找起。 说明:返回所要找寻的字符在一字符串$string中的位置,如果在字符串中找不到字 符的话,则会返回-l这个值。 范例: $x=index(testing,t); #此时$x=0; $x=index(testing,t,2); #此时$x=3; $x=index(testing,perl); #此时$x=-l; - - 指令:push 语法:push(array,$string) 说明:在数组array的最后一个元素后附加新的元素string到数组array中。 范例: array=(one,two); push(array,three); #此时array=one,two,three); - - 指令:pop 语法:pop(array) 说明:将数组array的最后一个元素删除,并将删除的元素返回。 范例: array=onetwo); $rm=poparray); #此时array=(one);而$rm=two; - - 指令:unshift 语法:unshift(array,$string) 说明:在数组array的第一个元素前附加新的元素$string到数组array中。 范例: array=(one,two); unshift(arraythree); #此时array=(three,one,two); - - 指令:shift 语法:shift(array) 说明:将数组array的第一个元素删除,并将删除的元素返回。 范例: array=(one,two);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论