perl cgi 简介 (一)
时间:2007-06-15 来源:easyworld
本文转贴自http://www.fanqiang.com
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; |
在使用数组的时候要先加上@这个符号,以下是一些范例:
@namel=("tom","mary"); | #将"tom","mary"这两个字符串指定给数组 @name1 |
@name2=@name1; | #此时的@name2=("tom","mary") |
@pame3=("john",@name1); | #此时的 (name3=("john","tom","mary") |
($one,@name4)=@name3; | #此时的$one="john",而 @name4=("tom"'"mary") |
@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=$int[0]; | #$b等于数组@int的第一个元素,所以$b=1 |
$C=@int[0]; |
#$c也是会等于数组@int的第一个元素,所以 #$c=1,因此要呼叫数组中的值有以上两种方法 |
$int[0]=2; |
#将2这个数值指定给数组@int的第一个元素 #此时@int=(2,3,5,7,9); |
$int[0,1]=[1,3]; |
#将1指定给数组@int的第一个元素,且将3指 #定给数组@int的第二个元素的,所以 #此时@int=(1,3,5,7,9); |
@int[0,1]=@int[1,0]; |
#将数组@int的前两个元素交换 #此时@int=(3,1,5,7,9) |
($int[0],$int[1]) | #也是将数组@int的前两个元素交换 |
=($int[l],$int[0]); | #此时@int=(1,3,5,7,9); |
@data=@int[0,l]; | #此时@date=(1,3); |
$int[5]=11; |
#将11这个数值指定给数组@int中第六个元素 #此时@int=(1,3,5,7,9,11) |
关联数组也是数组的一种,是由不同的纯量变量所组成。不过和数组不同的地方是在关联数组中的元素是由成对的key-value所组成的,也就是每一个 key都有一个相对应的值(value),这是在Perl语言中特有的语法,所以初学者对于关联数组可能会比较陌生一点,笔者会在这里作比较详细的说明。如果能够将关联数组的语法应用在CGI程序设计中,就会发现关联数组是一个很好用的语法。
在使用关联数组的时候要先加上%这个符号,而关联数组的格式如下:
%ARRAY=(keyl,value1,key2,value2,key3,value3...);
每一个key都有一个相对应的值(value)。
l.在关联数组中增加、更改一对数据:
$ARRAY{key}=value;
在关联数组ARRAY中加上一对key-value,要先在关联数组名称前加上$这个符号,而且key的名称要在{}符号之间,最后再指定key所对应的value值。如果在这个关联数组中已经有这个key了,就会更改这个key所对应的value。
2.取出关联数组中key所对应的value:
$get=$ARRAY{key};
取出在关联数组ARRAY中key所相对应的value,要先在关联数组名称前加上$这个 符号,而且key的名称要在{}符号之间,就会将key所对应的value取出来并指定给$get这个变量。
3.删除一对在关联数组中的数据:
delete $ARRAY{key};
delete是Perl所提供的函数,作用是删除关联数组中的一个key以及这个key所对应的value。使用方法是在delete函数之后,再指定关联数组中要删除key的名称。以下是有关关联数组用法的一些范例:
%NAMES=〈I'"one",2'"two"); | |
$one=$NAMES{1}; | #此时$one等于"one" |
$two=$NAMES{2}; | #此时$two等于"two" |
$NAMES{3}="third"; |
#增加一对key-value到关联数组NAMES中 #此时%NAMES=(1'"one",2'"two",3'"third"); |
$NAMES{3}="three"; |
#因为在关联数组中已经有3这个key了,所以就 #会把key为3所对应的value更改成"three" #此时%NAMES=(1'"one仰,2'"two",3'"three"); |
delete$NAMES{3}; |
#将关联数组中key值为3的一对key-value删除掉, #此时%NAMES=(1'"one",2'"two"), |
@X=%NAMES; |
#将关联数组NAMES指派给数组X #此时@X=(1'"one",2'"two"); |
%Y=@x; |
#将数组X指派给关联数组Y #此时%Y=(1'"one","two"); |
%NAMES=(); | #此时%NAMES为一个空的关联数组 |