Perl学习文档——Perl高级功能(CGI编程)《Perl编程24学时教程》

本文介绍了Perl在CGI编程中的应用,包括环境搭建、程序编写、表单处理等内容,并探讨了如何利用Perl的强大文本处理能力来增强Web应用程序的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cgi编程

<!--[if !supportLists]-->1. Perl用于cgi(基础配置):<!--[endif]-->

<!--[if !supportLists]-->l <!--[endif]-->Web应用程序的B/SBrowser/Server)结构

静态html网页;

服务器端脚本(asp, php, jsp, ruby等);

Cgi程序:Web服务器用来在服务器上运行程序以生成Web内容的公认的方法(common gateway interface),与服务器端脚本很相似。当客户机浏览器访问cgi程序的url时,服务器运行该cgi程序,生成html内容返回给客户的浏览器并显示。

可以使用多种语言编写cgi程序:perl, C, Unix Shell等等,选择perl是因为其强大的文本处理功能;

Cgi程序生成的Web内容可以为文本、图形、压缩文件、视频等

<!--[if !supportLists]-->l <!--[endif]-->Cgi运行环境的搭建:

需要安装Web Server,能够解析运行php程序的Apache HTTP Server可以配置成可运行perl编写的cgi程序,详细配置过程查看相关教程;(这样只需一个Apache Server即可)

<!--[if !supportLists]-->l <!--[endif]-->编写Perlcgi程序

例子(可以保存为hello.plhello.cgi或其他后缀名<需要在Apachehttpd.conf设置cgi-script脚本的后缀>)

#!C:\perl\bin\perl –w

此路径必须添加,表示perl解释程序安装的路径

use CGI qw(:standard);

使用perlcgi模块

use strict;

print header;

cgiheader函数,输出一个标准标题,server以及browser看到它才能处理cgi程序

#! must use 'my' to define a variable

my $now_string = localtime();

print "<b>Hello, CGI using Perl!</b><br/>It's $now_string NOW!<br />";

输出html内容

<!--[if !supportLists]-->l 运行perlcgi程序:<!--[endif]-->

可以在命令行下输入perl hello.pl显示结果为

Content-Type: text/html

以及print后的所有内容;

如果在浏览器的browser中输入该程序的url后,如http://localhost/hello.cgi

则会显示网页内容。

<!--[if !supportLists]-->2. 借助Perl强大的字符文本处理、“胶水语言” 功能、以及丰富的模块,将其用作服务器端的脚本语言,可以用来编写功能更加强大的Web应用程序(相对于php等,如可以实现html crawlerhtml/xml parser等)。<!--[endif]-->

<!--[if !supportLists]-->1) <!--[endif]-->表单提交form(php的类似)

含有表单的html文件,其中方法为getpost, action为处理表单提交数据的cgi程序的url

单击submitbutton,各个域的内容提交给cgi程序处理,cgi程序通过param函数接受参数的值(不带参数返回域的名字列表;以某个域的名字为参数返回该域传来的值);

注意:http的消息传输均为明文,安全其期间,可加密后传输(如md5加密);

<!--[if !supportLists]-->2) <!--[endif]-->创建多页窗体的方法,类似与wizard

采用html的隐藏域;<input type=”hidden” …>

告知下一页“是从当前页过去的”

<!--[if !supportLists]--><!--[endif]-->3) HTTP通信介绍:

BrowserWeb Server(ApacheIIS)的通信遵循HTTP协议,该协议目前两个版本HTTP 1.0/HTTP 1.1

Browser的地址栏中输入URL并连接Web Server后,便向Web Server发送HTTP请求,初始消息类似下面的形式:

GET http://www.google.com/ HTTP/1.0

Connection: Keep-Alive

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*

Accept-Charset: iso-8859-1, *, utf-8

Accept-Encoding: gzip

Accept-Language: en, en-GB, de, fr, ja, ko, zh

Host: www.google.com:80

User-Agent: Mozilla/4.51 [en]C-c<chmetcnv w:st="on" unitname="F" sourcevalue="32" hasspace="False" negative="False" numbertype="1" tcsc="0">32f</chmetcnv>404p {WinNT; U}

Web Server的应答信息通常为如下形式:

GET http://www.google.com/ --> 200 OK

Date: Mon, 21 May 2007 10:47:20 GMT

Server: GWS/2.1

Content-Length: 777324

Content-Type: text/html; charset=ISO-8859-1

Last-Modified: Mon, 21 May 2007 10:47:20 GMT

人工模仿该过程:

使用telnet,命令行下输入:

telnet www.google.com 80

连接成功後在输入:

GET http://www.google.com/ HTTP/1.0

两次回车,即可看到GoogleWeb ServerHTTP响应,及HTML源码

<!--[if !supportLists]--><!--[endif]-->4) perlcgi程序返回非文本信息:

perlcgi程序中print header; 默认的Content-Typetext/html

可修改header的参数,是的cgi程序向浏览器输出非文本信息,如:

Print header (-type =>MIME_type)
MIME_type
可以为:text/plain, image/gif, image/jpeg, 甚至application/appname(指应用程序appname特定的数据)

例子:

可以动态地输出图片:

<img src=”/cgi-bin/daily-image.cgi”>

这是daily-image.cgiperl程序中,需要print header (-type =>image/jpeg)

<!--[if !supportLists]-->5) 调用perlcgi程序的3种方法:<!--[endif]-->

<a href=’http://server/cgi-bin/perl.cgi’>hyperlink<a>

<img src=’/cgi-bin/daily-image.cgi’>

<form method=’get/post’ action=’http://server/cgi-bin/perl.cgi’>

可以将参数传给cgi程序

http://server/cgi-bin/perl.cgi?name=hemin&sex=male

如果参数含有转义字符,如空格、引号等

可以使用escape函数,如

http://server/cgi-bin/perl.cgi?name=escape($name)

<!--[if !supportLists]-->6) 服务器端包含程序SSI,需要Web Server设置,并浏览器支持<!--[endif]-->

通常为.shtml结尾,可以设置;

含有html注释的html文件;

注释部分即为SSI程序代码;

当浏览器URL访问该页时,Web Server分析注释的脚本并生成html,全部返回给浏览器;

Perl可以用来写SSI代码,潜入到html页面中

SSI挺像PHP等服务器端脚本的,只是它shtml结尾)

使用详情请看相关教程

<!--[if !supportLists]-->7) 更好地使用Perlcgi程序,可以查看cgi模块的帮助文档,含有许多函数的用法,完成不同的高级的功能;

<!--[endif]-->

Perldoc cgi或者查看cgihtml帮助文档

Perlcgi程序来完成重定向,它是天衣无缝的!

Print redirect (-url =>$target);

(不像JavaScriptwindow.location.hrefHTML中的<meta http-equiv=’refresh’>产生的重定向,有明显的延迟)

<!--[if !supportLists]-->8) <!--[endif]-->前面有,使得多个页面之间建立关系<图书馆借书的例子,很形象,下一步的操作时能够知道上一步进行到什么程度>(即知道该页面是由前一个页面过来的)可以使用两种方法:1为前面介绍的htmlinput隐藏域;另一种可以使用cookie<理解cookie,就像电影票,火车票一样>

浏览器访问Web服务器,服务器程序可以创建cookie,并发送保存到浏览器,客户端的用户机器里;用户下次访问是,服务器可以检索cookie,知道客户的信息等。

关于cookie

创建、使用、检索(查看)、中止时间、返回服务器设置等

存在的问题局限性

参看21

<!--[if !supportLists]-->9) <!--[endif]-->使用cgi发送电子邮件,看22章;

<!--[if !supportLists]-->10) <!--[endif]-->特殊的技术:

<23>

服务器推送技术,即页面定时显示不同内容;

客户机拖拉技术;

关于浏览器计数;

<24>

网络爬虫(LWP:Simple模块获得网页的内容;接着分析网页的结构;使用Perl提取出想要的东西)可以使用HTML以及XML的处理模块,方便分析。

关于Perl CGI学习,很好的实例网站: http://slashdot.org

(用到了perl, 以及服务器端包含程序SSI)

目 录 译者序 前言 第一部分 Perl基础 第1学时 Perl入门 3 1.1 安装Perl 3 1.1.1 等一等,也许你已经安装了Perl 4 1.1.2 在Windows 95/98/NT上安装Perl 5 1.1.3 在UNIX上安装Perl 6 1.1.4 在Macintosh系统上安装Perl 7 1.2 文档资料 7 1.2.1 某些特殊的文档资料举例 8 1.2.2 如果无法找到文档该怎么办 9 1.3 编写你的第一个Perl程序 9 1.3.1 键入程序 9 1.3.2 运行程序 9 1.3.3 程序正确将会发生什么情况 10 1.3.4 Perl程序的具体运行过程 10 1.3.5 必须知道的一些情况 11 1.4 课时小结 12 1.5 课外作业 12 1.5.1 专家答疑 12 1.5.2 思考题 12 1.5.3 解答 13 1.5.4 实习 13 第2学时 Perl的基本构件:数字和 字符串 14 2.1 直接量 14 2.1.1 数字 14 2.1.2 字符串 15 2.2 标量变量 16 2.3 表达式和运算符 18 2.3.1 基本运算符 18 2.3.2 数字运算符 19 2.3.3 字符串运算符 19 2.4 其他运算符 20 2.4.1 单参数运算符 20 2.4.2 递增和递减 21 2.4.3 尖括号运算符 21 2.4.4 其他赋值运算符 22 2.4.5 关于字符串和数字的一些说明 22 2.5 练习:利息计算程序 23 2.6 课时小结 24 2.7 课外作业 24 2.7.1 专家答疑 24 2.7.2 思考题 24 2.7.3 解答 25 2.7.4 实习 25 第3学时 控制程序流 26 3.1 语句块 26 3.2 if语句 27 3.2.1 其他关系运算符 28 3.2.2 “真”对于Perl意味着什么 29 3.2.3 逻辑运算符 30 3.3 循环 32 3.3.1 用while进行循环 32 3.3.2 使用for循环 33 3.4 其他流控制工具 33 3.4.1 奇特的执行顺序 33 3.4.2 明细控制 34 3.4.3 标号 35 3.4.4 退出Perl 35 3.5 练习:查找质数 35 3.6 课时小结 37 3.7 课外作业 37 3.7.1 专家答疑 37 3.7.2 思考题 37 3.7.3 解答 38 3.7.4 实习 38 第4学时 基本构件的堆栈:列表与数组 39 4.1 将数据放入列表和数组 39 4.2 从数组中取出元素 41 4.2.1 寻找结尾 42 4.2.2 关于上下文的详细说明 43 4.2.3 回顾以前的几个功能 44 4.3 对数组进行操作 45 4.3.1 遍历数组 46 4.3.2 在数组与标量之间进行转换 46 4.3.3 给数组重新排序 48 4.4 练习:做一个小游戏 49 4.5 课时小结 51 4.6 课外作业 51 4.6.1 专家答疑 51 4.6.2 思考题 51 4.6.3 解答 52 4.6.4 实习 52 第5学时 进行文件操作 53 5.1 打开文件 53 5.1.1 路径名 54 5.1.2 出色的防错措施 55 5.1.3 以适当的方式运行die函数 56 5.2 读取文件 56 5.3 写入文件 58 5.4 自由文件、测试文件和二进制数据 60 5.4.1 自由文件句柄 60 5.4.2 二进制文件 60 5.4.3 文件测试运算符 61 5.5 课时小结 62 5.6 课外作业 62 5.6.1 专家答疑 62 5.6.2 思考题 63 5.6.3 解答 63 5.6.4 实习 63 第6学时 模式匹配 64 6.1 简单的模式 64 6.2 元字符 66 6.2.1 一个简单的元字符 66 6.2.2 非输出字符 66 6.2.3 通配符 66 6.2.4 字符类 68 6.2.5 分组和选择 69 6.2.6 位置通配符 69 6.3 替换 70 6.4 练习:清除输入数据 70 6.5 关于模式匹配的其他问题 71 6.5.1 对其他变量进行操作 71 6.5.2 修饰符与多次匹配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值