Perl中使用CGI模块

来源:岁月联盟 编辑:zhu 时间:2009-03-05

  今天算是进入正题了,因为我们这个教程的名字就叫做“CGI编程”吗。在CGI模块诞生之前,写CGI程序是一件很令人自豪的事情,因为只有那么一小撮人会。但是后来CGI模块诞生了,整个世界发生了令人感到恐怖的变化,人人都可以编CGI程序了,555...。在Perl中我们使用一个名为CGI.pm的模块来进行CGI的编程,在其中提供了许多现成的东西供我们使用,下面我们通过两个简单的例子对CGI模块的基本功能有一个初步的了解。

  先来看一看一个基本的Perl-CGI程序。这个程序和我们以前见到的Perl程序有点不太一样,但是熟悉c 的朋友应该不会有问题的。

   #!/usr/bin/perl -w
    use CGI;
    {
    my $q = new CGI;
    print $q->header(),
       $q->start_html("hello perl world!"),
       $q->h1('hello perl world'),
       $q->end_html();
    }

  这里出现了一句“use CGI;”这一句是非常重要的。我们通过use这个关键字引入了CGI模块,注意一定要用大写。这里绝大部分工作都是由CGI模块来完成的。

  然后我们进行了这么一项工作:“my $q= new CGI;”这一句产生了一个新的CGI对象。new是一个新的语句,这个语句是由CGI模块提供的,Perl语言并不提供new这个语句。但是受到C 的影响,很多perl模块都提供new语句。我们可以通过new创建一个新的CGI模块。

  随后是一个很长的print语句,注意这里面用的是逗号,Perl里面可以通过逗号顺序执行一系列的语句。我们执行的第一句是“$q->header();”这一句将会产生一个http反应头,这个函数是可以使用参数的,通过不同的参数我们可以给浏览器返回不同的状态,例如下面的语句将会使浏览器以为发生了内部错误:“$q->header(500);”这里500是http respons的一个代号,代表服务器发生内部错误。

  然后下面一句是“$q->start_html("hello perl world!"),”这一句将会产生如下的Html代码:

  <html><head></head><body>

  我们还可以通过给start_html参数来进行其他的html文件head段设置。

  然后我们运行了“$q->h1('hello perl world'),”这一句可以得到如下Html代码:

  <h1>hello Perl world</h1>

  最后一句是“ $q->end_html();”这一句产生如下下代码“</body></html>”,一个Html文件就这么结束了。

  下面我们用一个例子解释CGI模块怎么处理用户的输入:

   #!/usr/bin/perl -w
    use CGI qw/:standard/;
    {
    my $cgi= new CGI;
    print $cgi->header,
       $cgi->start_html('A Simple Example'),
       $cgi->h1('A Simple Example');
       if ( $cgi->param())
         {
          print "Your name is ",
          $cgi->param('name');
         }
       $cgi->end_html();
    }

  如果在这个程序地url后面加上“?name=cyfer”就会打印出来“your name is cyfer”,呵呵。这里通过“$cgi->param("name");”这一句可以得到传递给CGI程序的参数。这个参数在没有CGI模块的时代要费多大劲才可以得到啊!555...

  好了今天就到这里吧!我们这两个简单的例子实际上已经可以展现CGI模块的优势了。呵呵,有问题一定要问啊!

  今天我们看看CGI.pm的两种使用模式,因为今后我们要经常和它打交道了。调用CGI模块的模式有两种,一种是面相对象方式的,另一种是面向过程的。下面的例子说明这两种调用方式,首先是面向过程的:

   !/usr/bin/perl -w
    use strict;
    use CGI;
    {
    print header(),
       start_html(),
       h1("你好");
    print end_html();
    }

  然后是面向对象方式的:

   !/usr/bin/perl -w
    use strict;
    use CGI;
    {
    my $cgi = new CGI;
    print $cgi->header(),
       $cgi->start_html(),
       $cgi->h1("你好"),
       $cgi->end_html();
    }

  这两段代码是随手写的没有经过测试,我们可以不去管这两种代码是如何实现的,仅仅知道有这么两种方式就可以了。另外,我建议使用面向对象的方式,因为面向对象方式的要比面向过程的方式效率高。

  然后我们讲一讲CGI.pm中的函数调用方式。CGI模块经常使用下面的调用方式。

  print $q->header(-type=>'image/gif',-expires=>' 3d');

  header里面的参数实际上是一个hash类型,这里面每个参数前面都有一个“-”(其意义为hypher),可能看着有点不顺眼,但是看惯了就好了。由于这些带“-”的参数是一个hash,因此我们可以使用下面的调用方式:

  print $q->header({-type=>'image/gif',-expires=>' 3d'});  #多了一个“{”

 

  然后是看看header()函数。header函数生成的部分是我们在浏览器里面看不到的。但是也是不能没有的。这一部分是告诉浏览器应该对返回的信息进行什么处理,做什么事情的部分。下面是几个标准的header使用的例子:

  $cgi->header("text/html"); #后面是一个标准的html文件,它是一种text文件。

  $cgi->header("image/gif"); #后面是一幅gif图。

  在接下来的学习中我们会通过几个实际的例子来加深和巩固以上的内容,今天就到这里吧。

上一篇:Perl 常用函数