菜鸟的迷你留言本(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是如何处理表单的。希望大家看过之后能有帮助。