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