常用系統(tǒng)函數(shù)列表
指令:print
語(yǔ)法:print Filehandle LIST
說(shuō)明:這個(gè)Filehandle可以看作在I(INPUT)/O(OUTPUT)之間的一個(gè)橋梁,可以利用FILEHANDLE來(lái)做出數(shù)據(jù)讀入寫(xiě)出的動(dòng)作.STDIN是代表從哪連輸入數(shù)據(jù),例如從電腦的鍵盤(pán)輸入;STDOUT是代表從哪連輸出數(shù)據(jù);例如從電腦的屏幕輸出;STDERR是代表從哪連輸出錯(cuò)誤的數(shù)據(jù),例如從電腦的屏幕輸出.而在PERL語(yǔ)言中有三個(gè)標(biāo)準(zhǔn)FILEHANDLE: 1.STDIN(標(biāo)準(zhǔn)輸入):是代表STDIN的FILEHANDLE
2.STDOUT(標(biāo)準(zhǔn)輸出):是代表STDOUT的FILEHANDLE
3.STDERR(標(biāo)準(zhǔn)錯(cuò)誤輸出):是代表STDERR的FILEHANDLE如果要使用其他FILEHANDLE的時(shí)候,就要用OPEN這個(gè)函數(shù)來(lái)打開(kāi)一個(gè)FILEHANDLE,我們可以用PRINT這個(gè)函數(shù)LIST的數(shù)據(jù)輸出給FILEHANDLE.
在為大家介紹PRINT這個(gè)函數(shù)之前,先讓我們來(lái)看看PRINT函數(shù)中特殊打印字符:
指令:#
說(shuō)明:注釋符號(hào)Remark宣告
示例:#這是一個(gè)注釋說(shuō)明
指令:print
語(yǔ)法:print Filehandle LIST
說(shuō)明:這個(gè)Filehandle可以看作在I(INPUT)/O(OUTPUT)之間的一個(gè)橋梁,可以利用FILEHANDLE來(lái)做出數(shù)據(jù)讀入寫(xiě)出的動(dòng)作.STDIN是代表從哪連輸入數(shù)據(jù),例如從電腦的鍵盤(pán)輸入;STDOUT是代表從哪連輸出數(shù)據(jù);例如從電腦的屏幕輸出;STDERR是代表從哪連輸出錯(cuò)誤的數(shù)據(jù),例如從電腦的屏幕輸出.而在PERL語(yǔ)言中有三個(gè)標(biāo)準(zhǔn)FILEHANDLE: 1.STDIN(標(biāo)準(zhǔn)輸入):是代表STDIN的FILEHANDLE
2.STDOUT(標(biāo)準(zhǔn)輸出):是代表STDOUT的FILEHANDLE
3.STDERR(標(biāo)準(zhǔn)錯(cuò)誤輸出):是代表STDERR的FILEHANDLE如果要使用其他FILEHANDLE的時(shí)候,就要用OPEN這個(gè)函數(shù)來(lái)打開(kāi)一個(gè)FILEHANDLE,我們可以用PRINT這個(gè)函數(shù)LIST的數(shù)據(jù)輸出給FILEHANDLE.
在為大家介紹PRINT這個(gè)函數(shù)之前,先讓我們來(lái)看看PRINT函數(shù)中特殊打印字符:
符號(hào) 其作用
\n 換行 new line
\r 光標(biāo)換行 return
\t tab鍵
\f 換頁(yè) form feed
\b 退回一格
\v 垂直tab鍵
\a 響鈴Bell
\e escape鍵
\007 十進(jìn)制ASC II碼
\xff 十六進(jìn)制碼
\c[ 控制字符
示例: print STDOUT "網(wǎng)上學(xué)園\n"; 將"網(wǎng)上學(xué)園"加上換行顯示在屏幕上.
語(yǔ)法: print LIST
說(shuō)明:如果省略Filehandle的話(huà),就會(huì)把Filehandle內(nèi)定為STDOUT.也就是會(huì)將LIST的數(shù)據(jù)內(nèi)容顯示在屏幕上.
示例: $url="www.netease.net/~zmd";
print "網(wǎng)上學(xué)園$url\n";
在屏幕上將會(huì)出現(xiàn)"網(wǎng)上學(xué)園www.netease.net/~zmd",如果想要讓雙引號(hào)內(nèi)的變量失效,可以在變量的前面加上"\"符號(hào).例如: print"網(wǎng)上學(xué)園\$url"; 這樣它就顯示:"網(wǎng)上學(xué)園$url"
語(yǔ)法: print
說(shuō)明:同省略Filehandle和LIST的話(huà),就會(huì)以STDOUT為Filehandle,并會(huì)輸出$_這個(gè)內(nèi)定輸出變量的數(shù)據(jù)內(nèi)容. 如果$_變量是一個(gè)空字符串的話(huà),就會(huì)顯示出一個(gè)空字符串.
示例: $_="網(wǎng)上學(xué)園\n"; print; 就會(huì)將"網(wǎng)上學(xué)園"加上換行顯示在屏幕上
指令: printf
語(yǔ)法: printf Filehandle LIST
說(shuō)明:在perl語(yǔ)言中也提代C語(yǔ)言中printf的語(yǔ)法,用法和C語(yǔ)言中的用法一模一樣.如果把Filehandle省略的話(huà) ,也一樣會(huì)把STDOUT當(dāng)成是內(nèi)定的Filehandle.在為大家介紹printf函數(shù)之前,先讓我們來(lái)看看printf函數(shù)中變換符號(hào)的字符.
符號(hào) 其作用
%c 字符
%s 字符串
%d 整數(shù)
%f 浮整數(shù)
%h 十六進(jìn)制碼
%o 八進(jìn)制碼
示例:printf("chomod%d%s\n","711""cgi"); 會(huì)將chmod 711 cgi加上換行顯示于屏幕上。
指令:chop 語(yǔ)法:chop($url)
說(shuō)明:把最后一個(gè)字符刪除。
示例:$url="www.nease.net/~zmd/";
chop($url); 這時(shí)$url="www.nease.net/~zmd" 而這兩行也可以寫(xiě)成chop($url="www.nease.net/~zmd/");
指令:split
語(yǔ)法:split(/pattern/,$text,limit) 其中/pattern/是文字處理的模式,而limit是代表要分割的個(gè)數(shù),一般可以省略。
說(shuō)明:用一個(gè)指定的文字處理模式來(lái)分割$text字符串。
示例:
$text="Michael,Gevin,Mike"; @name=split(/,/,$text); #這時(shí)@name=("Michael","Gevin","Mike");
($a,$b,$c)=split(/,/,$text); #這時(shí)$a="Michael";$b="Gevin";$c="Mike";
@name=split(/,/,$string,2); #這時(shí)@name=("Michael","Gevin");
在傳送CGI應(yīng)用程序數(shù)據(jù)的時(shí)候會(huì)先將數(shù)據(jù)編碼,其中會(huì)將FORM中第個(gè)數(shù)據(jù)字段的數(shù)據(jù)內(nèi)容用這個(gè)符號(hào)隔開(kāi),所以在解碼的時(shí)候就要以這個(gè)符號(hào)為分割的字符,將每個(gè)數(shù)據(jù)字段分割出。例如: $text="Mike=AMichael=B";
@name=split(//,$text); #這時(shí)@name=("Mike=A","Michael=B"); 而數(shù)據(jù)字段的名稱(chēng)和這個(gè)數(shù)據(jù)字段的值是用=這個(gè)符號(hào)來(lái)隔開(kāi),如果想取得數(shù)據(jù)字段的名稱(chēng)和所對(duì)應(yīng)的值的話(huà),就用要=這個(gè)符號(hào)來(lái)分割數(shù)據(jù)字段,例如: $name=""Mike=Michael"";
($name1,$name2)=split(/=/,$list); #這時(shí)$name1="Mike";$name2="Michael";
指令:keys
語(yǔ)法:keys(%array)
說(shuō)明:取出關(guān)聯(lián)數(shù)組%ARRAY中全部的key。
示例:%NAME=(1,"mike",2,"michael"); @readkey=keys(%NAMES); #這時(shí)@readkey=(1,2);
指令:values
語(yǔ)法:values(%array)
說(shuō)明:取出關(guān)聯(lián)數(shù)組%ARRAY中全部的value。
示例:%NAMES=(1,"mike",2,"michael"); @readval=values(%NAMES); #這時(shí)@readval=("mike","michael");
指令:reverse
語(yǔ)法:reverse(@array)
說(shuō)明:將數(shù)組@array中的元素由后到前重新排列。
示例:@back=("A","B","C","D","E"); @back=reverse(@back); #這時(shí)@back=("E","D","C","B","A");
指令:sort
語(yǔ)法:sort(@array)
說(shuō)明:將數(shù)組中的元素由小到大排序,如果要由大到小排序的話(huà),要加上reverse這個(gè)函數(shù)。
示例:
@abc=("d","b","c","a"); @abc=sort(@abc); #這時(shí)@abc=("a","b","c","d");
@abc=(reverse sort@abc); #這時(shí)@abc=("d","c","b","a"); 這個(gè)語(yǔ)法也可以寫(xiě)成@abc=(reverse sort(@abc));
@number=(5,2,10); @number=sort(@number); 上面示例用sort函數(shù)來(lái)排序數(shù)值的時(shí),會(huì)出差錯(cuò),因此要用下面到下面這一句。 @number=(sort{$a=>$b}@number); #這時(shí)@number=(2,5,10);
指令:length
語(yǔ)法:length($string)
說(shuō)明:求出字符串$string的字節(jié)(bytes)值。
示例:$string="Perl5"; $size=length($string); #這時(shí)$size=5;
指令:substr
語(yǔ)法:substr($string,offset,length) offset代表起始字符的位置,length代表引用的字符串長(zhǎng)度,如果省略length則代表從起始值到字符串的最后一個(gè)字符長(zhǎng)度。而offset如果是負(fù)值的話(huà),就會(huì)從字符串右邊開(kāi)始指定字符。
示例:
$s=substr("perl5",2,2); #這時(shí)$s="rl";
$s=substr("perl5",2); #這時(shí)$s="rl5";
$s=substr("perl5",-2,2); #這時(shí)$s="er";
指令:index
語(yǔ)法:index($string,$substring,position) $substring是要尋找的字符;position代表從哪一個(gè)位置開(kāi)始尋找,假如省略position就從頭開(kāi)始找起。
說(shuō)明:返回所要找尋的字符在一字符串$string中的位置,如果在字符串中找不到字符的話(huà),則會(huì)返回-1這個(gè)值。
示例:
$s=index("perl5","p"); #這時(shí)$s=0
$s=index("perl5","l",2); #這時(shí)$s=3
$s=index("perl5","perl"); #這時(shí)$s=-1
指令:push
語(yǔ)法:push(@array,$string)
說(shuō)明:在數(shù)組@array的最后附加新的元素 ($string)到數(shù)組@array中。
示例:@array=("one","two"); push(@array,"three"); #這時(shí)$@array=("one","two","three")
指令:pop
語(yǔ)法:pop(@array)
說(shuō)明:將數(shù)組(@array)的最后一個(gè)元素刪除,并將刪除的元素返回。
示例:@array=("one","two"); $rm=pop(@array); #這時(shí)@array=("one");而$rm="two";
指令:unshift
語(yǔ)法:unshift(@array,$string) 說(shuō)明:在數(shù)組@array的第一個(gè)元素前附加新的元素$string到數(shù)組@array中。 示例: @array=("one","two"); unshift(@array,"three"); #這時(shí)@array=("three","one","two")
指令:shift
語(yǔ)法:shift(@array)
說(shuō)明:將數(shù)組@array的第一個(gè)元素刪除,并將刪除的元素返回。
示例:@array=("one","two"); @rm=shift(@array); #這時(shí)@array=("two");而$rm="one";
指令:join
語(yǔ)法:join($string,@array)
說(shuō)明:在一數(shù)組@array的元素之間加上一指定的字符$string,并將結(jié)果返回。
示例:
@array=("one","two","three");
$total=join(":",@array); 這時(shí)$total="one:two:three";
指令:grep
語(yǔ)法:grep(/pattern/,@array)
說(shuō)明:將合文字處理模式(regular expression)的數(shù)組元素找出來(lái)。
示例:
@array=("one","on","in");
$count=grep(/on/,@array); #這時(shí)$count=2
@result=grep(/on/,@array);#這時(shí)@result=("one","on");
指令:hex
語(yǔ)法:hex($string)
說(shuō)明:將十六進(jìn)制的數(shù)值轉(zhuǎn)成十進(jìn)制。
示例: $decimal=hex("ff"); 這時(shí)$decimal=255;
指令:rand
語(yǔ)法:rand($interger)
說(shuō)明:常和函數(shù)srand搭配來(lái)取得一隨機(jī)數(shù),如果沒(méi)有先宣告stand函數(shù)的話(huà),則取出的常數(shù)值是一個(gè)固定值。這個(gè)語(yǔ)法會(huì)返回一個(gè)介于0和$interger之間的數(shù)值,如果$interger省略的話(huà),則會(huì)返回一個(gè)介于0和1 的數(shù)值。
示例:
srand; #要先宣告srand函數(shù),才能產(chǎn)生隨機(jī)數(shù)的效果
$int=rand(10); #$int的值會(huì)大于0而且小于10如果希望產(chǎn)生的亂數(shù)是整數(shù)的話(huà),就要再加上int #這個(gè)函數(shù)
$int=int(rand(10)); #$int的值是一個(gè)整數(shù),且值在0和9之間
指令:localtime
語(yǔ)法:localtime(time)
說(shuō)明:可返回九個(gè)有關(guān)時(shí)間的元素,在寫(xiě)CGI應(yīng)用程序的時(shí)候常會(huì)用到系統(tǒng)的時(shí)間,所以在此會(huì)詳細(xì)介紹這個(gè)函數(shù)的用法。
示例:
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
其中: $sec代表秒數(shù)[0,59] $min代表分?jǐn)?shù)[0,59] $hour代表小時(shí)數(shù)[0,23] $mday代表是在這個(gè)月的第幾天[1,31] $mon代表月數(shù)[0,11],要將$mon加1之后,才能符合實(shí)際情況。$year從1990年算起的年數(shù) $wday從星期六算起,代表是在這周中的第幾天[0-6] $yday從一月一日算起,代表是在這年中的第幾天[0,365] $isdst只是一個(gè)flag 知道這些變量之后,就可以在CGI應(yīng)用程序中拿來(lái)應(yīng)用了。此外,也可以用下面這一行指令在UNIX系統(tǒng)下取得系統(tǒng)的時(shí)間。為了避免錯(cuò)誤發(fā)生,最好用絕對(duì)路徑的方法來(lái)取得系統(tǒng)時(shí)間,如果絕對(duì)路徑不清楚的話(huà)可以用"which data"這個(gè)指令來(lái)得知。最后要提字符的話(huà),就不能正確執(zhí)行系統(tǒng)的程序了。 $data='/usr/bin/data'; 而在perl5版本中,也可以用下面這一行指令來(lái)取得系統(tǒng)時(shí)間。 $data=localtime(time);
指令:die
語(yǔ)法:die LIST
說(shuō)明:會(huì)把LIST字符串顯示出來(lái),并退出程序。常常和$!這個(gè)代表錯(cuò)誤信息變量一起使用。
示例:open(FILE,"$filename")||die "不能打開(kāi)文件$!\n; 如果打開(kāi)文件失敗的話(huà),就會(huì)顯示出錯(cuò)誤的信息,之后再退出程序。
指令:open
語(yǔ)法1:open(filehandle,"$filename") 其中$filename是一個(gè)指定打開(kāi)的文件名。
說(shuō)明:這是一個(gè)很常用的函數(shù),可用于文件的打開(kāi)(read only)。在CGI程序設(shè)計(jì)中常常會(huì)打開(kāi)一個(gè)文件來(lái)讀取數(shù)據(jù),所以筆者會(huì)詳加說(shuō)明這一個(gè)函數(shù)相關(guān)用法。這個(gè)filehandle可把它看作在 I(INPUT)/O(OUTPUT)之間的一個(gè)橋梁,可以利用FILEHANDLE來(lái)作出數(shù)據(jù)讀入寫(xiě)出的動(dòng)作。開(kāi)始可用OPEN這個(gè)函數(shù)來(lái)打開(kāi)一個(gè)指定的文件,接下來(lái)可以用ltfilehandle>來(lái)讀取所打開(kāi)文件的數(shù)據(jù)內(nèi)容,最后一定要用close這個(gè)函數(shù)來(lái)關(guān)閉這個(gè)之前打開(kāi)的filehandle。要注意的是在CGI程序定作中,當(dāng)用OPEN這個(gè)函數(shù)來(lái)打開(kāi)一個(gè)文件時(shí),一定要在打開(kāi)文件前加上文件所在的絕對(duì)路徑名稱(chēng)。
示例:
$filename="usr/abc.txt";
open(FILE,"$filename")||die"不能打開(kāi)文件$filename\n; #將ltfile>數(shù)據(jù)指定給純變量$line(一行一行地)
while($line=ltfile>)
{
print"$line";
}
close(file); 就會(huì)把a(bǔ)bc.txt這個(gè)文件的內(nèi)容顯示出來(lái)。
語(yǔ)法2:open(filehandle,"$filename")
說(shuō)明:這個(gè)語(yǔ)法也可以打開(kāi)一個(gè)存在的文件(read only)。
示例:
$filesname="usr/abc.txt";
open(file,"$filename")||die"不能打開(kāi)文件$filename\n";
@array=ltfile> #將ltfile>全部的數(shù)據(jù)內(nèi)容都指定給數(shù)組@array close(file);
print "@array"; 也會(huì)把a(bǔ)bc.TXT這個(gè)文件的內(nèi)容顯示出來(lái)。
語(yǔ)法3:open(filehandle,">$filename")
說(shuō)明:建立一個(gè)新的文件(write only),如果已經(jīng)存在這個(gè)文件了,就會(huì)把舊文件名覆蓋掉。并可用print filehandle的方式將數(shù)據(jù)到所打開(kāi)的文件中。
示例:
$filename="/usr/abc.txt";
open(file,">$filename")||die"不能打開(kāi)文件$filename\n;
print file "this is a new line1\n; #\n是換行字符
print file "this is a new line2\n;
close(file); 會(huì)打數(shù)據(jù)存在一個(gè)新文件中。
語(yǔ)法4:open(filehandle,">>$filename")
說(shuō)明:數(shù)據(jù)用附加的方式定入一文件(write only),如果指定的文件名不存在的話(huà)就會(huì)建立一個(gè)新的文件。
示例:
$filename="/path/abc.txt";
open(file,">>$filename")||die"不能打開(kāi)文件$filename\n";
print file "this is a new line1\n";
print file "this is a new line2\n";
close(file);
會(huì)打數(shù)據(jù)附加(append)到一個(gè)文件(abc.txt)中。
語(yǔ)法5:open(filehandle,"|unix command")
說(shuō)明:就會(huì)把在filehandle的數(shù)據(jù)輸入給unix的指令來(lái)作處理。
示例:
$mailprog="/usr/ucb/mail"; #unix系統(tǒng)上的寄信程序(一定要加絕對(duì)路徑)
$who="mqingyi@126.com";
$open(file,"|$mailprog$who")||die"打開(kāi)失敗\n";
print file "I love you!\n";
print file "I want to see you.\n";
close(file);
就會(huì)通過(guò)unix系統(tǒng)mail的程序,將FILE這個(gè)FILEHANDLE的數(shù)據(jù)內(nèi)容寄給$who這個(gè)變量所指定的收信人。我們可以利用open這個(gè)函數(shù)來(lái)設(shè)計(jì)一個(gè)來(lái)信批評(píng)CGI應(yīng)用程序,在本書(shū)中的下一章中會(huì)有詳細(xì)的介紹。
指令:close
用法:close(filehandle)
說(shuō)明:用open這個(gè)函數(shù)來(lái)打開(kāi)一個(gè)filehandle之后,一定要用close批這個(gè)函數(shù)把所打開(kāi)的filehandle關(guān)閉。
示例:
open(filehandle,"$filename");
close(filehandle);
指令:pack
語(yǔ)法:pack("指定的格式",list)
說(shuō)明:pack這個(gè)函數(shù)會(huì)將一個(gè)list變成所指定的二進(jìn)制數(shù)據(jù)格式。在CGI程序分割解碼過(guò)程中,會(huì)用到pack這個(gè)函數(shù),所以筆者在此簡(jiǎn)單介紹這個(gè)函數(shù)的用法。
示例:$string=pack("c",65); #這時(shí)$string="a";將65這個(gè)ascii碼轉(zhuǎn)換成一個(gè)unsigned字符,其中c就是指定要轉(zhuǎn)換成unsigned字符的意思。
指令:read
語(yǔ)法:read(filehandle,$string,length) 其中l(wèi)ength是代表讀入字符串的長(zhǎng)度(bytes)。
說(shuō)明:用read這個(gè)函數(shù)把filehandle中的數(shù)據(jù)依指定的字符串長(zhǎng)度讀入之后指派給$string這個(gè)變量。在cgi程序分割解碼過(guò)程中,如果FORM的傳送方式是設(shè)定為POST的話(huà),就會(huì)將傳送的數(shù)據(jù)設(shè)定為標(biāo)準(zhǔn)輸入,所以會(huì)將數(shù)據(jù)內(nèi)容指定給STDIN 這個(gè)標(biāo)準(zhǔn)輸入的filehandle,而CGI環(huán)境變量$env{'content_length'}就是代表使用者送出數(shù)據(jù)內(nèi)容的長(zhǎng)度,因此我們要用read這個(gè)函數(shù)來(lái)取得使用者送出的數(shù)據(jù)內(nèi)容。
示例:read(stdin,$buffer,$env{'content_length'}); 就會(huì)將stdin這個(gè)標(biāo)準(zhǔn)輸入filehandle中的數(shù)據(jù)依指定的字符串長(zhǎng)度讀入,再指派給$buffer這個(gè)變量。
指令:exit
語(yǔ)法:exit
說(shuō)明:退出執(zhí)行的程序。
示例: print"i love cgi\n"; exit; 顯示完"i love cgi"以后,將退出這個(gè)程序。