一个简单的读取并处理表格请求数据的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";
}