Perl 5教程
by flamephoenix

目录

第一部分 Perl语言

第一章 概述

第二章 简单变量

第三章 操作符

第四章 列表和数组变量

第五章 文件读写

第六章 模式匹配

第七章 控制结构

第八章 子程序

第九章 关联数组(哈希表)

第十章 格式化输出

第十一章 文件系统

第十二章 引用(指针)

第十三章 面向对象编程

第十四章 包和模块

附录一 函数集

第二部分 Perl的CGI应用

第一章 cgilib例

第二章 动态创建图像

第三章 计数器的编写方法

第四章 Web Server设置

第五章、...
 

第一章 cgilib例(未定稿)

by flamephoenix

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

下一章 目录