|
菜鸟的迷你留言本(perl版) |
|
perl作为一种可在多平台下运行的解释性语言,已被大量运用于各个领域(本人工作的公司就是用perl在unix下生成报表)。同时作为一种cgi语言,获得了广大cgi程序员的喜爱。本人是一菜鸟,用perl写cgi的时间不足一个月。下面是我写的一个简易留言本。功能有限,但还是能够在一定程度上体现了如何用
perl写cgi程序,希望入门者看过这篇文章能够有所帮助。 perl编写cgi主要是调用CGI.pm这一模块。首先你要确认你的perl解释器包含这一模块。代码如下: <html> <head> <title>简易留言本-积分卡问题</title> </head> <body> <form action="/cgi-bin/notebook.cgi"> 请问您的问题种类: <INPUT TYPE=radio name=probtype value=notright>积分不正确 <INPUT TYPE=radio name=probtype value=notpay>积分未返利 <BR> <TEXTAREA name=problem rows=10 cols=40> 请具体描述问题. </TEXTAREA> <BR> 您的积分卡号: <INPUT TYPE=text width=40 name=number><BR> <INPUT TYPE=submit name=submit value="Submit Problem"> </FORM> </body> </html> 以上是留言本的界面,你还可以再美化一点。以下是notebook.cgi的代码: #!/usr/bin/perl -w #确认你的perl解释器路径 use strict; use CGI qw(:all); #调用cgi模块中所有函数 use Fcntl qw(:flock); #调用Fcntl中的flock函数 my $gbdata="c:/temp/notebook"; #保存留言的文件 my $semaphore_file="c:/temp/abc.sem"; #设置信标文件 #锁定信标文件 sub get_lock { open(SEM, ">$semaphore_file") || die "无法创建文件!"; flock(SEM, LOCK_EX) || die "无法锁定文件!"; } #解除锁定 sub release_lock { close(SEM); } #记录留言 sub save { get_lock(); open(GB, ">>$gbdata") || die "不能打开文件!"; print GB "number: ", param('number'), "n"; print GB "type: ", param('probtype'), "n"; print GB "problem: ", param('problem'), "n"; close(GB); release_lock(); } #显示留言 sub display { open(GB, $gbdata) || die "不能打开文件!"; while(<GB>){ print "<B><I>$_</B></I><P>"; my($type,$prob); $type=<GB>; $prob=<GB>; print "$type<P>"; print "$prob<BR><HR>"; } close(GB); } print header; if (defined param('submit')) { save; display; } else { display; } 这个留言本十分简单。并且对留言的回复没有针对性,也不利于留言的统计,用文本文件记录始终不是一个好的选择。但是这个例子可以在一定程度上反映出perl是如何处理表单的。希望大家看过之后能有帮助。 |