📄 perlcgi.htm
字号:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><meta name="Microsoft Theme" content="bars 011"><title>CGI-Perl 实例起步</title></head><body background="barbkgde.gif" bgcolor="#FFFFFF" text="#000000" link="#666633"vlink="#999933" alink="#993300"><!--mstheme--></font><h2><!--mstheme--><font color="#000000"><font color="#FF0000">CGI-Perl 实例起步</font><!--mstheme--></font></h2><!--msthemeseparator--><p align="left"><img src="barrulee.gif"></p><!--mstheme--></font><h2><!--mstheme--><font color="#000000">网际网路_线上CGI教室<!--mstheme--></font></h2><form action="quiz.cgi" method="POST"> <p>为了让网友对CGI的写作有更深一层的认识本站特辟此单元来对CGI作实务上的解说,</p> <p>第一部份我们先以下面的的CGI程式作例子,然後将其程式码逐条拿出来分析测试 , 以</p> <p>达到立竿见影的效果</p><!--msthemeseparator--> <p align="left"><img src="barrulee.gif"></p><!--mstheme--> </font><h2><!--mstheme--><font color="#000000">线上测验篇<!--mstheme--></font></h2> <p>第一题、现任的台北市长是谁?</p> <p><input type="radio" name="1" value="A">陈水扁 <input type="radio" checked name="1" value="B">黄大洲 <input type="radio" name="1" value="C">苏贞昌</p> <p>第二题、 美国国庆日几月几日?</p> <p><input type="radio" checked name="2" value="A">6月8日 <input type="radio" name="2" value="B">9月4日 <input type="radio" name="2" value="C">7月4日</p> <p>第叁题、请问有"诗仙"之称的诗人是?</p> <p><input type="radio" checked name="3" value="A">杜甫 <input type="radio" name="3" value="B">白居易 <input type="radio" name="3" value="C">李白</p> <p>第四题、现任的台北县长是谁?</p> <p><input type="radio" checked name="4" value="A">陈水扁 <input type="radio" name="4" value="B">黄大洲 <input type="radio" name="4" value="C">苏贞昌 </p> <p>第五题、"Superstition"代表下列何种含意?</p> <p><input type="radio" checked name="5" value="A">自信 <input type="radio" name="5" value="B">迷信 <input type="radio" name="5" value="C">守信</p> <p><input type="submit" value="送出试卷"> <input type="reset" value="重新填写"> </p></form><p>当你测试完以上的表格CGI会作出以下的回应</p><!--msthemeseparator--><p align="left"><img src="barrulee.gif"></p><!--mstheme--></font><h1><!--mstheme--><font color="#000000"><font color="#0000FF">线上测验</font><!--mstheme--></font></h1><p><font color="#0000FF">你是第 19550 位的受测者 </font></p><p><font color="#0000FF">我是来自於:127.0.0.1<br>测试时间:1998年5月09日23时:03分:39秒 </font></p><p><font color="#0000FF">第 1 题你所答的答案是:A 标准答案:A<br>第 2 题你所答的答案是:A 标准答案:C<br>第 3 题你所答的答案是:C 标准答案:C<br>第 4 题你所答的答案是:B 标准答案:C<br>第 5 题你所答的答案是:B 标准答案:B<br></font></p><p><font color="#0000FF">您总共答对:3 题;答错:2 题 </font></p><p><font color="#0000FF">您总共得到:60 分</font></p><!--msthemeseparator--><p align="left"><img src="barrulee.gif"></p><p>也许你会想这是怎麽发生的呢?别忙 ! 让我们看看以下程式码解说後,琢磨之後相信你对</p><p>CGI的写作就不会再那麽的陌生了.</p><p># Tony lin Copyright 1998 all rights reserved </p><p># <a href="http://www.tpe.wownet.net/~g65617">http://www.tpe.wownet.net/~g65617</a> </p><p>$|=1; </p><p>print "Content-type: text/html\n\n"; </p><p>$today_date=&get_date; </p><p>$counter="counter/counter.txt"; </p><p><br>print "<TITLE>The Scripts : WWWQuiz</TITLE>";<br>print "<h1>线上测验</h1>";<br>print "<BODY BGCOLOR="#ffffff">";<br></p><p>open(NUMBER,"$counter") || die $!;<br>$number = <NUMBER>;<br>close(NUMBER); </p><p>$number++; </p><p>open(NUMBER,">$counter") || die $!;<br>print NUMBER $number;<br>close(NUMBER);<br><br></p><p>print "你是第 $number 位的受测者<p>"; </p><p>print"我是来自於:$ENV{'REMOTE_ADDR'}<br>";</p><p>print"测试时间:$today_date <p>"; </p><p>&parse; </p><p>%ANSWER=("1","A","2","C","3","C","4","C","5","B");<br>$right=0;<br>$wrong=0; </p><p>foreach $Num (sort keys %FORM){<br>print "第 $Num 题你所答的答案是:$FORM{$Num} ";<br>print "标准答案:$ANSWER{$Num}<br>"; </p><p>if ($FORM{$Num} eq $ANSWER{$Num}){<br>$right++;<br>}else{$wrong++;}<br>}<br>$score=20*$right;<br>print "<p>您总共答对:$right 题;答错:$wrong 题<p>";<br>print "<p>您总共得到:$score 分<p>"; </p><p>sub get_date<br>{ </p><p>local($date,$localtime);<br></p><p>($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); </p><p>if ($sec < 10) {<br>$sec = "0$sec";<br>}<br>if ($min < 10) {<br>$min = "0$min";<br>}<br>if ($hour < 10) {<br>$hour = "0$hour";<br>}<br>if ($mon < 10) {<br>$mon = "0$mon";<br>}<br>if ($mday < 10) {<br>$mday = "0$mday";<br>} </p><p>$month = ($mon + 1); </p><p>$localtime = "19$year年$month月$mday日$hour时\:$min分\:$sec秒";<br>}<br><br></p><p>sub parse{ </p><p>read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); </p><p>@pairs = split(/&/, $buffer); </p><p>foreach $pair (@pairs){<br>($name, $value) = split(/=/, $pair);<br>$value =~ tr/+/ /;<br>$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;<br>$FORM{$name} = $value;<br>}<br>}</p><!--msthemeseparator--><p align="left"><img src="barrulee.gif"></p><p>研读完上面的原始程式码之後 , 你是不是有点懂又不太懂呢,或是雾煞煞呢 ?</p><p>不过没关系,以下的说明相信能让你茅塞顿开,而对它产生了一丁点的兴趣呢</p><p>现在我们就把上面的程式码穿肠剖肚的拿出来一一的加以说明吧 !</p><!--mstheme--></font><h4><!--mstheme--><font color="#000000"><font color="#0080FF">解说开始______________________________________________解说开始</font><!--mstheme--></font></h4><!--mstheme--></font><h5><!--mstheme--><font color="#000000"># Tony lin Copyright 1998 all rights reserved <!--mstheme--></font></h5><p>在perl语言里程式若遇到前面有 # 这样的标示时程式会将它当成注解而不执行它</p><p>$|=1;</p><p>将$|这个变数设成<font> 1</font>时,就会把缓冲区关毕,这样所输出的资料就不会存在缓冲区里</p><p>CGI在输出文字时才不会出错,一般我们都把 $| 设定成 1.</p><!--mstheme--></font><h4><!--mstheme--><font color="#000000"><font>print "Content-type: text/html\n\n";</font> <!--mstheme--></font></h4><p>这一行是告诉CGI程式要以啥格式来输出表单填写後的的回应,因为我们是以HTML</p><p>的格式输出所以 Content-type:之後 就以 text/html 这个格式表示之,至於後面的\n\n又</p><p>是甚麽意思呢?那是代表换行的字元 .</p><p><font>$today_date=&get_date; </font></p><p><font>$today_date 这是一个变数 </font>, 甚麽是变数呢 , 我们以下面的例子来作简单的说明 :</p><p>$Tony="林立弦" 这时後 如果我们用 print 这个函数来输出 $Tony 这个变数时,那麽</p><p>程式码应该会写成这样 :</p><p>print $Tony ;</p><p>执行之後在你的<font color="#FF0000">浏 器</font>上就会出现 :</p><p>林立弦 这样的字眼</p><p>如果 $Tony="我想我已经了解变数的意义了" 这时後 如果我们用 print 这个函数</p><p>来输出 $Tony 这个变数时,执行之後在你的浏 器上就会出现 :</p><p>我想我已经了解变数的意义了 这样的字眼</p><p>说到这里,我想各为网友已经了解变数的意义了吧 !</p><p><font>那麽 </font><font color="#FF0000">$today_date=&get_date;</font><font> 又是甚麽涵意呢</font>?</p><p>首先我们来谈谈 <font color="#FF0000">&get_date </font><font color="#000000">这个东东 ,它是从那里来的呢 ? 相信细心一点的网</font></p><p><font color="#000000">友大慨已经了解一二了,是的,它就是从以下这个副程式而来的</font></p><p><font color="#FF0000">sub get_date<br>{ </font></p><p><font color="#FF0000">local($localtime);<br></font></p><p><font color="#FF0000">($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); </font></p><p><font color="#FF0000">if ($sec < 10) {<br>$sec = "0$sec";<br>}<br>if ($min < 10) {<br>$min = "0$min";<br>}<br>if ($hour < 10) {<br>$hour = "0$hour";<br>}<br>if ($mon < 10) {<br>$mon = "0$mon";<br>}<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -