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是如何处理表单的。希望大家看过之后能有帮助