明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

CGI教學(xué):首章 cgilib例

[摘要]一個簡單的讀取并處理表格請求數(shù)據(jù)的cgilib.pl例子:#!/usr/bin/perlsub readGetData{ # 指定局部變量queryString用以保存和傳遞函數(shù)的參數(shù) local(*queryString) = @_ if @_; # 讀取環(huán)境變量QUERY_STRING的值賦給...
一個簡單的讀取并處理表格請求數(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長度的字符賦給$queryString
read(STDIN,$queryString,$contentLength);
}
return 1;
}

sub readData{
local(*queryString) = @_ if @_;
# 讀取環(huán)境變量REQUEST_METHOD
$requestType=$ENV{"REQUEST_METHOD"};

# 如果請求方式為GET則使用函數(shù)readGetData
# 否則如果請求方式為POST則使用函數(shù)readPostData
if($requestType eq "GET"){
&readGetData(*queryString);
}
elsif($requestType eq "POST"){
&readPostData(*queryString);
}
return 1;
}

sub DecodeData{
local(*queryString)= @_;
# 把加號轉(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)換成鍵-值對
@tmpArray = split(/&/,$queryString);

# 在數(shù)組@tmpArray內(nèi)循環(huán)
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";
表格數(shù)據(jù)處理:
%dataDict=();
&readData(*data);
&parseData(*data,dataDict);
字典數(shù)據(jù)處理:
while(($key,$value)=each(%dataDict)){
print $key,"=",$value,"\n\n";
}




相關(guān)文章