一個簡單的讀取並處理表格請求數據的cgilib.pl例子︰ #!/usr/bin/perl sub readGetData{ # 指定局部變量queryString用以保存和傳遞函數的參數 local(*queryString) = @_ if @_; # 讀取環境變量QUERY_STRING的值賦給變量$queryString $queryString = $ENV{"QUERY_STRING"}; return 1; } sub readPostData{ local(*queryString)=@_ if @_; local($contentLength); # 讀取環境變量CONTENT_LENGTH的值 $contentLength = $ENV{"CONTENT_LENGTH"}; # 檢查是否有數據 if($contentLength){ # 從設備STDIN讀取contentLength長度的字符賦給$queryString read(STDIN,$queryString,$contentLength); } return 1; } sub readData{ local(*queryString) = @_ if @_; # 讀取環境變量REQUEST_METHOD $requestType=$ENV{"REQUEST_METHOD"}; # 如果請求方式為GET則使用函數readGetData # 否則如果請求方式為POST則使用函數readPostData if($requestType eq "GET"){ &readGetData(*queryString); } elsif($requestType eq "POST"){ &readPostData(*queryString); } return 1; } sub DecodeData{ local(*queryString)= @_; # 把加號轉換成空格 $queryString=~s/\+/ /g; # 轉換十六進製字符 $queryString=~s/%(..)/pack("c",hex($1))/ge; return 1; } sub parseData{ local(*queryString,*formData) = @_ if @_; local($key,$value,$curString,@tmpArray); # 以&為分隔符把字符串轉換成鍵-值對 @tmpArray = split(/&/,$queryString); # 在數組@tmpArray內循環 foreach $curString(@tmpArray){ # 以=為分隔符分開鍵-值對 ($key,$value) = split(/=/,$curString); # 解碼 &DecodeData(*key); &DecodeData(*value); # 把鍵和值加到字典中 $formData{$key}=$value; } return 1; } 1; #end of file cgilib.pl 使用方法︰ 要使用此庫需含下列語句︰ #require "cgilib.pl"; 表格數據處理︰ %dataDict=(); &readData(*data); &parseData(*data,dataDict); 字典數據處理︰ while(($key,$value)=each(%dataDict)){ print $key,"=",$value,"\n\n"; } |