Perl在CGI程式設計中常用的函式 (轉)

amyz發表於2007-11-10
Perl在CGI程式設計中常用的函式 (轉)[@more@]

指令:#
說明:註解符號Remark宣告
範例:#本是一個示範註解說明

-------------------------------------------------------------------------
指令:print
語法一:print Filehandle LIST
說明:這個Filehandle可把它看作在I(Input)/O(Output)間的一個橋樑,可以利用Filehandle來做出資料讀入寫出的動作。stdin是代表從哪邊輸入資料,例如從的鍵盤輸入,stdout是代表從哪邊輸出資料;例如從電腦的螢幕輸出;stderr是代表從哪邊輸出錯誤的資料,例如從電腦的螢幕輸出。而在語言中有三個標準的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 換頁Fofeed
b 退回一鍵Backspace
v 垂直Tab鍵
a 響鈴Bell
07 十進位制ASCII碼
xff 十六進位制碼
c[ 控制字元
範例:
  print STDOUT"i love perln";
  將“i love perl"再加上換行顯示於螢幕上。
-------------------------------------------------------------------------
語法二:Print LIST
說明:如果省略Filehandle的話,就會把Filehandle內定為STDOUT。也就是會將LIST的資料內容顯示於螢幕上。
範例:
  $Str1ng="perl";
  print"i love $stri";
  會將“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 八進位制碼
範例:
  printf〈"chmod%d%s\n","7l1","cgi");
  會將“chmod 7ll cgi”再加上換行顯示於螢幕上。
-------------------------------------------------------------------------
指令:chop
語法:chop($string)
說明:把最後一個字元刪除掉,常常用這個函式把換行的字?br> ?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&e=B";
@list=split(/&/,$string), #此時@list=〈"who=A","=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 ); #此時@array=("c","b","a");
這個語法也可以寫成@array=(reverse sort(@array));
@number=(l0,3.20);
@number=sort(@number); #此時@number=(l0,20,3);
由上個範例可以知道如果要sort函式來排 序數值的時候,就會出差錯,因此要用下面這個方法才能正確地使用sort函式來排序。
@number=(sort{$a<=>$b}@number); #此時@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=〈"one"'"two");
$rm=pop〈@array); #此時@array=("one");而$rm="two";

-------------------------------------------------------------------------
指令:unshift
語法:unshift(@array,$string)
說明:在陣列@array的第一個元素前附加新的元素$string到陣列@array中。
範例:
@array=("one","two");
unshift(@array'"three"); #此時@array=("three","one","two");

-------------------------------------------------------------------------
指令:shift
語法:shift(@array)
說明:將陣列@array的第一個元素刪除,並將刪除的元素返回。
範例:
@array=("one","two");
$rm=shift(@array); #此時@array=("two"),而$rm="one";

-------------------------------------------------------------------------
指令:join
語法:join($string,@array)
說明:在一陣列@array的元素之間加上一指定的字元$string,並將結果返回。
範例:
@array=("one","two","three");
$total=join(":",@array); #此時$total="one:two:three";

-------------------------------------------------------------------------
指令:grep
語法:grep(/pattern/,@array)
說明:將符合文書處理模式(regular expression)的陣列元素找出來。
範例:
@array=("one","on","in");
$count=grep(/on/,@array); #此時$count=2;(代表有二個元素符合)
@result=grep(/on/,@array); #此時@result=("one","on");

-------------------------------------------------------------------------
指令:hex
語法:hex($string)
說明:將十六進位制的數值轉成十進位制。
範例:
$decimal=hex("ff"); #此時$decimal=255;

-------------------------------------------------------------------------
指令:rand
語法: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
語法: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應用程式中拿來應用了。此外,也可以用下面這一行指令在系統下取得系統的時間。為了避免錯誤發生,最好用絕對路徑的方法來取得系統時間,如果絕對路徑不清楚的話可以用“which date”,這個指令來得知。最後要提醒讀者的是要用`這個符號才能Unix系統的外部程式,如果是用‘(單引號)這個字元號的話,就不能正確執行系統的程式了。

  $date=`/usr/bin/date`;
  而在perl5版本中,也可以用下面這一行指令來取得系統時間。
  $date=localtime(time);
-------------------------------------------------------------------------
指令:d
語法:die LIST
說明:會把LIST字串顯示出來,並退出程式。常常和$!這個代表錯誤資訊的變數一起使用。
範例:
  Open(FILE'"$filename")||die"Cannotopenfile$!n";
  如果開啟失敗的話,就會顯示出錯誤的資訊,之後再退出程式。
---------------------------------------------------------------------
指令:open
語法:open(Filehandle'"$fiiename")
  其中$filename是一個指定開啟的檔名。
說明:這是一個很常用的函式,可用於檔案的開啟(Read0niy)。在CGI中常常會開啟一個檔案來讀取資料,所以筆者會詳加說明這一個函式的相關用法。這個Filehandle可把它看作在I(Inpnt)/O(Output)間的一個橋樑,可以利用Filehandle來作出資料讀入寫出的動作。開始可用open這個函式來開啟一個指定的檔案,接下來可以使用來讀取所開啟檔案的資料內容,最後一定要用close這個函式來關閉這個之前開啟的Filehandle。要注意的是在CGI程式寫作中,當用open這個函式來開啟檔案的時候,一定要在開啟的檔案前加上檔案所在的絕對路徑名稱。
範例:
  $filename=Vpath/cgi.txt";
  open(FILE'"$filename")||die"Can not open $filename\n";
  #將資料指派給純量變數$line(一行一行地)
  while($line=){
   print"$line";
  }
  close(FILE);
  就會把cgi.txt這個檔案的內容顯示出來。
-------------------------------------------------------------------------
語法二:open(Filehandle,"說明:這個語法也可以開啟一個存在的檔案(Read Only)。
範例:
  $filename="/path/cgi.txt";
  open(FILE,"  #將全部的資料內容都指派給陣列@array
  @array=;
  close(FILE);
  print"@array";
  也會把cgi.txt這個檔案的內容顯示出來。
-------------------------------------------------------------------------
語法三:open(Filehandle,">$filemme)
說明:建立一個新的檔案(Write Only),如果已經存在這個檔案了,就會把舊檔名覆蓋過去。並可用print Filehandle的方式將資料寫到所開啟的檔案中。
範例:
  $filename="/path/cgi.txt";
  open(FILE,">$filename")||die"Can not open $filenamen";
  print FILE"this is a new line1n";  #n是換行字元
  print FILE"this is a new line2n";
  close(FILE);
  會把資料存在一個新檔案中。
-------------------------------------------------------------------------
語法四:Open(Filehandle,">>$filename")
說明:資料用附加的方式寫入一檔案(Write Only),如果指定的檔名不存在的話,就會建立一個新的檔案。
範例:
  $filename="/path/cgi.txt";
  open(FILE,">>$filename")||die"Can not open $filenamen";
  print FILE"this is a newline1n";
  print FILE"this is a newline2n";
  close(FILE);
  會把資料附加(append)到一個檔案(cgi.txt)中。
-------------------------------------------------------------------------
語法五:Open(Filehandle,"|Unix Command")
說明:就會把在Fiiehandle的資料輸出給Unix的指令來作處理。
範例:
  $mailprog="/usr/ucb/mail"; #Unix系統上的要加絕對路徑哦!)
  $who="";
  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"之後,就馬上退出這個程式。


 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981613/,如需轉載,請註明出處,否則將追究法律責任。

相關文章