发信人: mark7312(小马哥) 
整理人: workingnow(2002-09-30 12:01:53), 站内信件
 | 
 
 
Perl原来主要用于编写一些Unix系统上的管理和监控程序,由于Perl与Unix系统紧密相连,故后来很多人都喜欢采用Perl来编写CGI程序。现在相当一部分企业都会采用NT平台,但大部分仍然采用Perl进行应用开发。因为它具有良好的通用性和强大的字处理能力,即使以后改用Unix系统(可能由于接入用户数增多,访问量加大),程序修改量也不大(VBScript则无法移植,VBScriptWindowsonly)。 
 
 ----与其它CGI编写语言(VBScript、JavaScript-forserver、CShell、C/C++...)相比,Perl具有以下5个优点: 
 
 ----1具有高度可扩展性和随时可用。 
 
 ----2具有非常强大的字串处理功能。 
 
 ----3很容易调用系统命令(shellcommands),易于编写Unix系统程式。 
 
 ----4具备面向对象的编程能力,代码的可维护性、复用性好。 
 
 ----5适用于各类Web服务器(如:Unix、NT、Netscape),具有良好的通用性。 
 
 ----由于具有以上的优点,故可以相信无论以后Internetserver(包括Webserver)的主导是NT(IIS)还是Unix(NCSA、apache...),Perl都会是炙手可热的CGI编写语言。 
 
 一CGI基本原理 
 ----client<--->Webserver<--->CGI<---> 
 DataBase/ServerFile/ServerEnvironment 
 
 ----当某些Web页面能够产生动态文件,让你填入表格,显示精彩动画,或是收发大型数据库信息,读取和设置各类服务器/路由器环境变量和状态,八成是利用公共网关界面,也就是所谓的CGI(CommonGatewayInterface)。 
 
 ----CGI本身不是一种程序语言,而是Webserver与DataBaseServer/其它Server之间交互作用的机制。利用CGI,软件工程师得以让Web页面可直接读取和设置各类服务器/路由器、检索各类大型数据库等。 
 
 二开发环境的建立 
 ----如果你采用的WebServer是基于unix系统的,只需安装相应的perl编译程序即可;如果是基于Windows95/NT的则除了安装好编译程序外,还要在注册表中作登记。下面以IIS(MicrosoftWebServer,NT自带)为例。 
 ----当你在NT上装好Perl编译程序后,需进行以下几项的设置,IIS才会支持Perl程序的调用。 
 
 ----1)运行Regedt32.exe注册表编辑器(如果不知在哪里,可用search找) 
 
 ----2)打开下面的目录(准备添加信息进该目录) 
 
 ----HKEY_local_machineSystemCurrentControlSet 
 ServicesW3SVCParametersScriptMap 
 
 ----3)在EDIT菜单下选择‘添加数值’选项 
 
 ----4)´数值名称´填.pl 
 
 ----5)‘数值类型’填REG_SZ 
 
 ----6)按确定后,再填写‘字符串’ 
 
 ----‘字符串’=c:perl5inperl.exe%s%s 
 
 ----(如果你的perl.exe文件不是位于该目录,只要填上相应路径即可。) 
 
 ----7)重新起动WebServer 
 
 ----注:如果是其它WebServer,修改方法类似。希望获取perl编译程序(免费软件)或相关帮助资料,可到相关的站点上进行查找。下面列出部分网址供大家参考。 
 
 http://202.96.151.200/zyr/ 
 http://www.perl.hip.com/ 
 http://www.roth.net/odbc/ 
 ftp://ftp.linux.activeState.com/pub/Perl-Win32/ 
 
 ----当一切准备妥当后,就可以着手开发一些程序了。下面将会以一些简单、有用的例子帮助大家理解一些利用perl开发Internet/Intranet应用的方法和技巧。 
 
 三利用Perl开发Internet/Intranet应用的方法与技巧 
 ----1Perl5.0的某些语法 
 
 ----为了方便大家对后面内容的理解,在这里先介绍一些perl5.0的基础知识。 
 
 ----1)变量(对象)的表示方法:前面以$打头,如:$db,$bcd 
 
 ----2)普通阵列的表示方法:前面以@打头,如:@value 
 
 ----读取方式:$value[0],$value[1]... 
 
 ----3)相关阵列的表示方法:前面以%打头,如:%value 
 
 ----相关阵列与普通阵列没有什么不同,差别只在它的索引值是用字串,而非一般常用的整数值。 
 
 ----读取方式:$value{$string1},$value{$string2}... 
 
 ----4)读写文件用open命令 
 
 ----如:open(INPUT,"<zyr.txt"); 
 
 ----读文件用“<”、写文件用“>”、追加文件用“>>” 
 
 ----2强大的字串处理功能 
 
 ----在前面已提过perl具有非常强大的字串处理功能,它除了提供一些字符运算比较符(eq,ne,le...)外,还提供了大量针对字符串匹配的参数。这是其它一些cgi编写语言所不具有的。 
 
 ----我们经常会遇到,传递的参数是中文信息,但接收到后却都是乱码。这是什么原因呢?我们都知道,一个中文占用2个字节,而一个英文字母只占用1个字节,unicode编码除外(unicode是Microsoft提出的标准,采用16位同时对中英日韩等多国文字进行编码的机制)。server接收到参数信息后,会以字节为单位把每单位信息转换为两个十六进制数,这时候,中文的高字节会被转换为"%**",而低字节也被转换为"%**"。如果使用perl,该参数信息非常容易就能被还原出来。 
 
 ... 
 $info=$ENV{´QUERY_STRING´}; 
 #读取参数信息到变量$info中 
 $info=~s/%([dA-Fa-f][dA-Fa-f]) 
 /pack("c",hex($1))/eg; 
 
 ----该语句的语法含义是:s是取代的意思;"/"中的内容是要找的格式(“=~”是一些特殊字符,具体含义见表一);%([dA-Fa-f][dA-Fa-f])表示以%开始,后连续跟着两个十六进制数的字串(dA是一些字符匹配格式,具体含义见表二),找到该字串后,系统把该值存放在$1中;pack("c",hex($1))表示把$1中的数转换为真正的十六进制字串;e表示把整个要替换的字串当做表达式;g表示整个字串都要做相应的查找替换。 
 
 ----除了转换中文参数外,我们还经常要面对查找、替代诸如log文件、邮件等大量信息的困难;如果使用perl提供的一系列参数,将省去很多不必要的麻烦。限于篇幅关系,下面仅列出一些常用的参数。 
 
 ----表一: 
 
 =~寻找给定字串的特殊格式 
 m取消//内“^”、“$”的特殊含义 
 i字串匹配时不考虑大小写 
 x字串匹配时不考虑空格 
 s取代的意思 
 
 表二: 
 w匹配一个文字或数字字符,包括“_” 
 W匹配一个非文字/数字字符 
 s匹配一个空白字符,包括“space”、“tab”键入的字符 
 S匹配一个非空白字符 
 d匹配一个数字字符 
 D匹配一个非数字字符 
 匹配一个二进制字符 
 B匹配一个非二进制字符 
 A仅从字串开始进行匹配 
  
  
 
 
  ---- 小马哥
  
 美丽的梦和美丽的诗一样,都是可遇而不可求的,
 常常在最没能料到的时候里出现
       | 
 
 
 |