亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

文字

第一章 cgilib例(未定稿)

by flamephoenix

一個(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";
}

上一篇: 下一篇: