perl-cgi 简介 (三)
时间:2007-06-21 来源:easyworld
指令:substr
语法:substr($string,offset,length)
其中offset代表起始字符的位置,length代表引用的字符串长度,如省略length的话代表从起始值到字符串的最后一个字符长度。而offset如果是负值的话,就会从字符串右边开始取出指定的字符串。
说明:在一字符串$string中取出想要的字符串。
范例:
指令:index
语法:index($string,$substring,position)
其中$substring是指要寻找的字符,position代表要从哪一个位置开始找起,如省略position的话就从头开始找起。
说明:返回所要找寻的字符在一字符串$string中的位置,如果在字符串中找不到字符的话,则会返回-l这个值。
范例:
指令:push
语法:push(@array,$string)
说明:在数组@array的最后一个元素后附加新的元素string到数组@array中。
范例:
指令:pop
语法:pop(@array)
说明:将数组@array的最后一个元素删除,并将删除的元素返回。
范例:
指令:unshift
语法:unshift(@array,$string)
说明:在数组@array的第一个元素前附加新的元素$string到数组@array中。
范例:
指令:shift
语法:shift(@array)
说明:将数组@array的第一个元素删除,并将删除的元素返回。
范例:
、指令:join
语法:join($string,@array)
说明:在一数组@array的元素之间加上一指定的字符$string,并将结果返回。
范例:
指令:grep
语法:grep(/pattern/,@array)
说明:将符合文字处理模式(regular expression)的数组元素找出来。
范例:
指令:hex
语法:hex($string)
说明:将十六进制的数值转成十进制。
范例:
指令:rand
语法:rand($interger)
说明:常和函数srand搭配来取得一随机数,如果没有事先宣告stand函数的话,则取出的数值是一个固定值。这个语法会返回一个介于0和$interger之间的数值,如果$interger省略的话,则会返回一个介于0和1的数值。
范例:
指令:localtime
语法:localtime(time)
说明:可返回九个有关时间的元素,在写CGI应用程序的时候常会用到系统的时间,所以在此会详细介绍这个函数的用法。
范例:
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
其中:
$date=`/usr/bin/date`;
而在perl5版本中,也可以用下面这一行指令来取得系统时间。
$date=localtime(time); 指令:die
语法:die LIST
说明:会把LIST字符串显示出来,并退出程序。常常和$!这个代表错误信息的变量一起使用。
范例:
Open(FILE'"$filename")||die"Cannotopenfile$!\n";
如果打开文件失败的话,就会显示出错误的信息,之后再退出程序。 指令:open
语法:open(Filehandle'"$fiiename")
其中$filename是一个指定打开的文件名。
说明:这是一个很常用的函数,可用于文件的打开(Read0niy)。在CGI程序设计中常常会打开一个文件来读取数据,所以笔者会详加说明这一个函数的 相关用法。这个Filehandle可把它看作在I(Inpnt)/O(Output)间的一个桥梁,可以利用Filehandle来作出数据读入写出的 动作。开始可用open这个函数来打开一个指定的文件,接下来可以使用<Filehandle>来读取所打开文件的数据内容,最后一定要用 close这个函数来关闭这个之前打开的Filehandle。要注意的是在CGI程序写作中,当用open这个函数来打开文件的时候,一定要在打开的文 件前加上文件所在的绝对路径名称。
范例:
$filename=Vpath/cgi.txt";
open(FILE'"$filename")||die"Can not open $filename\n";
#将数据指派给纯量变量$line(一行一行地)
while($line=<FILE>){
print"$line";
}
close(FILE);
就会把cgi.txt这个文件的内容显示出来。 语法二:open(Filehandle,"<$filename")
说明:这个语法也可以打开一个存在的文件(Read Only)。
范例:
$filename="/path/cgi.txt";
open(FILE,"<$filename")||die"Can not open $filename\n";
#将<FILE>全部的数据内容都指派给数组@array
@array=<FILE>;
close(FILE);
print"@array";
也会把cgi.txt这个文件的内容显示出来。 语法三:open(Filehandle,">$filemme)
说明:建立一个新的文件(Write Only),如果已经存在这个文件了,就会把旧文件名覆盖过去。并可用print Filehandle的方式将数据写到所打开的文件中。
范例:
$filename="/path/cgi.txt";
open(FILE,">$filename")||die"Can not open $filename\n";
print FILE"this is a new line1\n"; #\n是换行字符
print FILE"this is a new line2\n";
close(FILE);
会把数据存在一个新文件中。 语法四:Open(Filehandle,">>$filename")
说明:数据用附加的方式写入一文件(Write Only),如果指定的文件名不存在的话,就会建立一个新的文件。
范例:
$filename="/path/cgi.txt";
open(FILE,">>$filename")||die"Can not open $filename\n";
print FILE"this is a newline1\n";
print FILE"this is a newline2\n";
close(FILE);
会把数据附加(append)到一个文件(cgi.txt)中。 语法五:Open(Filehandle,"|Unix Command")
说明:就会把在Fiiehandle的数据输出给Unix的指令来作处理。
范例:
$mailprog="/usr/ucb/mail"; #Unix系统上的寄信程序(要加绝对路径哦!)
$who="[email protected]";
open(FILE,"|$mailprog$who")||die"CannotFail!\n";
print FILE"想不想我呀?\n";
print FILE"要快一点回信哦!\n";
close(FILE);
就会通过Unix系统mail的程序,将FILE这个Filehandle的数据内容寄给$who这个变量所指定的收信人。我们可以利用open这个函数来设计一个来信批评指教的CGl应用程序,在本书中的下一章中会有详细的介绍。 指令:close
用法:close(Filehandle)
说明:用open这个函数来打开一个filehandle之后,一定要用close这个函数把所打开的Filehandle关闭。
范例:
open(Fiiehandle,"$filename");
close(Filehandle); 指令:pack
语法:pack("指定的格式",LIST)
说明:pack这个函数会将一个LIST变成所指定的二进制数据格式。在CGI程序分割解码过程中,会用到pack这个函数,所以笔者在此简单介绍这个函数的用法。
范例:
$string=pack("C",65); #此时$string="A";
将65这个ASCII码转换成一个unsigned字符,其中C就是指定要转换成unsigned字符的意思。 指令:read
语法:read(Filehandle,$string,length)
其中length是代表读入字符串的长度(bytes)。 说明:用read这个函数把Filehand1e中的数据依指定的字符串长度读入之后指派给$string这个变量。在CGI程序分割解码过程中,如果 FORM的传送方式是设定为POST的话,就会将传送的数据设定为标准输入,所以会将数据内容指定给STDIN这个标准输入的Filehandle,而 CGI环境变量$ENV{'CONTENT_LENGTH'}就是代表使用者送出数据内容的长度,因此我们要用read这个函数来取得使用者送出的数据内 容。
范例:
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
就会将STDIN这个标准输入Filehandle中的数据依指定的字符串长度读入,再指派给$buffer这个变量。 指令:exit
语法:exit
说明:退出执行的程序。
范例:
print"i love perl";
exit;
显示出“i love perl"之后,就马上退出这个程序。
语法: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($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(@array,$string)
说明:在数组@array的最后一个元素后附加新的元素string到数组@array中。
范例:
@array=("one","two"); | |
push(@array,"three"); | #此时@array=〈"one","two","three"); |
语法:pop(@array)
说明:将数组@array的最后一个元素删除,并将删除的元素返回。
范例:
@array=〈"one"'"two"); | |
$rm=pop〈@array); | #此时@array=("one");而$rm="two"; |
语法:unshift(@array,$string)
说明:在数组@array的第一个元素前附加新的元素$string到数组@array中。
范例:
@array=("one","two"); | |
unshift(@array'"three"); | #此时@array=("three","one","two"); |
语法:shift(@array)
说明:将数组@array的第一个元素删除,并将删除的元素返回。
范例:
@array=("one","two"); | |
$rm=shift(@array); | #此时@array=("two"),而$rm="one"; |
语法:join($string,@array)
说明:在一数组@array的元素之间加上一指定的字符$string,并将结果返回。
范例:
@array=("one","two","three"); | |
$total=join(":",@array); | #此时$total="one:two:three"; |
语法:grep(/pattern/,@array)
说明:将符合文字处理模式(regular expression)的数组元素找出来。
范例:
@array=("one","on","in"); | |
$count=grep(/on/,@array); | #此时$count=2;(代表有二个元素符合) |
@result=grep(/on/,@array); | #此时@result=("one","on"); |
语法:hex($string)
说明:将十六进制的数值转成十进制。
范例:
$decimal=hex("ff"); | #此时$decimal=255; |
语法:rand($interger)
说明:常和函数srand搭配来取得一随机数,如果没有事先宣告stand函数的话,则取出的数值是一个固定值。这个语法会返回一个介于0和$interger之间的数值,如果$interger省略的话,则会返回一个介于0和1的数值。
范例:
srand; | #要先宣告srand函数,才能产生随机数的效果 |
$int=rand(10); | #$int的值会大于0而且小于10 |
如果希望产生的乱数是整数的话,就要再 加上int这个函数 | |
$int=int(rand(10)); | #$int的值是一个整数,且值在0和9之间 |
语法:localtime(time)
说明:可返回九个有关时间的元素,在写CGI应用程序的时候常会用到系统的时间,所以在此会详细介绍这个函数的用法。
范例:
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
其中:
$sec | 代表秒数[0,59] | $min | 代表分数[0,59] |
$hour | 代表小时数[0,23] | $mday | 代表是在这个月的第几天[1,31] |
$mon | 代表月数[0,11],要将$mon加l之后,才能 符合实际情况 | ||
$year | 从l990年算起的年数 | ||
$wday | 从星期六算起,代表是在这周中的第几天 [0,6] | ||
$yday | 从一月一日算起,代表是在这年中的第几 天[0,365] | ||
$isdst | 只是一个flag | ||
知道这些变量之后,就可以在CGI应用程序中拿来应用了。此外,也可以用下面这一行指令在Unix系统下取得系统的时间。为了避免错误发生,最好用绝对路径的方法来取得系统时间,如果绝对路径不清楚的话可以用“which date”,这个指令来得知。最后要提醒读者的是要用`这个符号才能执行Unix系统的外部程序,如果是用‘(单引号)这个字符号的话,就不能正确执行系统的程序了。 |
$date=`/usr/bin/date`;
而在perl5版本中,也可以用下面这一行指令来取得系统时间。
$date=localtime(time); 指令:die
语法:die LIST
说明:会把LIST字符串显示出来,并退出程序。常常和$!这个代表错误信息的变量一起使用。
范例:
Open(FILE'"$filename")||die"Cannotopenfile$!\n";
如果打开文件失败的话,就会显示出错误的信息,之后再退出程序。 指令:open
语法:open(Filehandle'"$fiiename")
其中$filename是一个指定打开的文件名。
说明:这是一个很常用的函数,可用于文件的打开(Read0niy)。在CGI程序设计中常常会打开一个文件来读取数据,所以笔者会详加说明这一个函数的 相关用法。这个Filehandle可把它看作在I(Inpnt)/O(Output)间的一个桥梁,可以利用Filehandle来作出数据读入写出的 动作。开始可用open这个函数来打开一个指定的文件,接下来可以使用<Filehandle>来读取所打开文件的数据内容,最后一定要用 close这个函数来关闭这个之前打开的Filehandle。要注意的是在CGI程序写作中,当用open这个函数来打开文件的时候,一定要在打开的文 件前加上文件所在的绝对路径名称。
范例:
$filename=Vpath/cgi.txt";
open(FILE'"$filename")||die"Can not open $filename\n";
#将数据指派给纯量变量$line(一行一行地)
while($line=<FILE>){
print"$line";
}
close(FILE);
就会把cgi.txt这个文件的内容显示出来。 语法二:open(Filehandle,"<$filename")
说明:这个语法也可以打开一个存在的文件(Read Only)。
范例:
$filename="/path/cgi.txt";
open(FILE,"<$filename")||die"Can not open $filename\n";
#将<FILE>全部的数据内容都指派给数组@array
@array=<FILE>;
close(FILE);
print"@array";
也会把cgi.txt这个文件的内容显示出来。 语法三:open(Filehandle,">$filemme)
说明:建立一个新的文件(Write Only),如果已经存在这个文件了,就会把旧文件名覆盖过去。并可用print Filehandle的方式将数据写到所打开的文件中。
范例:
$filename="/path/cgi.txt";
open(FILE,">$filename")||die"Can not open $filename\n";
print FILE"this is a new line1\n"; #\n是换行字符
print FILE"this is a new line2\n";
close(FILE);
会把数据存在一个新文件中。 语法四:Open(Filehandle,">>$filename")
说明:数据用附加的方式写入一文件(Write Only),如果指定的文件名不存在的话,就会建立一个新的文件。
范例:
$filename="/path/cgi.txt";
open(FILE,">>$filename")||die"Can not open $filename\n";
print FILE"this is a newline1\n";
print FILE"this is a newline2\n";
close(FILE);
会把数据附加(append)到一个文件(cgi.txt)中。 语法五:Open(Filehandle,"|Unix Command")
说明:就会把在Fiiehandle的数据输出给Unix的指令来作处理。
范例:
$mailprog="/usr/ucb/mail"; #Unix系统上的寄信程序(要加绝对路径哦!)
$who="[email protected]";
open(FILE,"|$mailprog$who")||die"CannotFail!\n";
print FILE"想不想我呀?\n";
print FILE"要快一点回信哦!\n";
close(FILE);
就会通过Unix系统mail的程序,将FILE这个Filehandle的数据内容寄给$who这个变量所指定的收信人。我们可以利用open这个函数来设计一个来信批评指教的CGl应用程序,在本书中的下一章中会有详细的介绍。 指令:close
用法:close(Filehandle)
说明:用open这个函数来打开一个filehandle之后,一定要用close这个函数把所打开的Filehandle关闭。
范例:
open(Fiiehandle,"$filename");
close(Filehandle); 指令:pack
语法:pack("指定的格式",LIST)
说明:pack这个函数会将一个LIST变成所指定的二进制数据格式。在CGI程序分割解码过程中,会用到pack这个函数,所以笔者在此简单介绍这个函数的用法。
范例:
$string=pack("C",65); #此时$string="A";
将65这个ASCII码转换成一个unsigned字符,其中C就是指定要转换成unsigned字符的意思。 指令:read
语法:read(Filehandle,$string,length)
其中length是代表读入字符串的长度(bytes)。 说明:用read这个函数把Filehand1e中的数据依指定的字符串长度读入之后指派给$string这个变量。在CGI程序分割解码过程中,如果 FORM的传送方式是设定为POST的话,就会将传送的数据设定为标准输入,所以会将数据内容指定给STDIN这个标准输入的Filehandle,而 CGI环境变量$ENV{'CONTENT_LENGTH'}就是代表使用者送出数据内容的长度,因此我们要用read这个函数来取得使用者送出的数据内 容。
范例:
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
就会将STDIN这个标准输入Filehandle中的数据依指定的字符串长度读入,再指派给$buffer这个变量。 指令:exit
语法:exit
说明:退出执行的程序。
范例:
print"i love perl";
exit;
显示出“i love perl"之后,就马上退出这个程序。
相关阅读 更多 +