• 新规:续航150公里以下新能源车取消补贴 2019-10-11
  • 法国革命时代,女人流行穿什么 2019-10-11
  • 黑龙江省县(市、区)委统战部长培训班举办 2019-10-06
  • “夏季第一瓜”竟是它! 2019-10-06
  • 《阿古顿巴》藏语版在藏语卫视首播 2019-09-06
  • 晋中市“三同步”推动互联网治理创新 2019-08-27
  • 法媒:研究称美国人常用药物或增加抑郁风险 2019-08-27
  • 宝贝是地名,你能想到这么浪漫的地名在哪儿吗? 2019-08-15
  • 何树山副省长到方圆机电调研指导工作 2019-08-15
  • 中国体彩今晚开奖号码:perl的cgi高级编程介绍

    来源:本网整理

    彩票双色球历史开奖结果 www.s9h6.com 一 CGI.pm中的方法(routines)调用

    1. CGI.pm实现了两种使用方法,分别是面向对象的方式和传统的perlmodule方法的方式。
    面向对象的方式:

    复制代码 代码如下:
    #!/usr/local/bin/perl -w
    use CGI;   # load CGI routines
    $q = CGI->new;                        # create new CGI object
    print $q->header,                    # create the HTTP header
        $q->start_html('hello world'), # start the HTML
        $q->h1('hello world'),         # level 1 header
        $q->end_html;                  # end the HTML

    传统的module方法的方式:
    复制代码 代码如下:
    #!/usr/local/bin/perl
    use CGI qw/:standard/;           # load standard CGI routines
    print header,                    # create the HTTP header
         start_html('hello world'), # start the HTML
         h1('hello world'),         # level 1 header
         end_html;                  # end the HTML


    2. CGI.pm中的方法。

    CGI.pm中的方法,通常有很多的参数,所以一般我们使用命名参数的方式来调用,例如:
    复制代码 代码如下:
    print $q->header(-type=>'image/gif',-expires=>'+3d');

    命名参数的值可以为scalar或array reference类型,例如:
    复制代码 代码如下:
    $q->param(-name=>'veggie',-value=>'tomato');
    $q->param(-name=>'veggie',-value=>['tomato','tomahto','potato','potahto']);


    3. CGI.pm中的html元素(html shortcuts)方法

    所有的html的元素(例如h1,br等)在CGI.pm中都有对应的方法,这些方法根据需要动态的生成,且都包含2个参数,第一个参数为hash类型,对应html元素的属性,第二个参数的string类型,对应html元素的内容。例如html中的h1对应的方法为h1( ):
    Code              Generated HTML
    ----                 --------------
    h1()                <h1>
    h1('some','contents');             <h1>some contents</h1>
    h1({-align=>left});                  <h1 align="LEFT">
    h1({-align=>left},'contents'); <h1 align="LEFT">contents</h1>
    有时你想自己处理元素的开始和结尾,则可以使用start_tag_name和end_tag_name,例如
    print start_h1,'Level 1 Header',end_h1;
    有的时候start和end方法没有被自动生成,需要显示的指定,例如:
    use CGI qw/:standard *table start_ul/;
    用来自动生成start_table,end_table,start_ul和end_ul方法。

    另一个实例:

    复制代码 代码如下:
    print a({-href=>'fred.html',-target=>'_new'}, "Open a new frame");
    <a href="fred.html",target="_new">Open a new frame</a>


    二 CGI.pm中获取cgi的参数

    @names = $query->param        #get all params
    @values = $query->param('foo'); #get param foo as list            
    $value = $query->param('foo'); #get param foo as scalar
    param()获取参数的结果可以为scalar或array类型,例如当参数的结果来自多选的scrollinglist的时候就为array类型。如果参数的值在querystring中没有给定("name1=&name2="),param()将返回emptystring。如果参数在querystring中根本不存在,则param()则返回undef或emptylist。当参数为多个值时querystring中写法为var1=value1&var1=value2&var1=value3.

    三 header and start_html
    1. header指定html的header,例如

    复制代码 代码如下:
    print header;   # 返回默认的type:text/html
    print header('image/gif'); #设定type为:image/gif      
    print header('text/html','204 No response');
    $cookie1 = $q->cookie(-name=>'riddle_name', -value=>"The Sphynx's Question");
    $cookie2 = $q->cookie(-name=>'answers', -value=>\%answers);
    print header(-type=>'image/gif',
        -nph=>1,
        -status=>'402 Payment required',
        -expires=>'+3d',
         -cookie  => [$cookie1,$cookie2] ,
        -charset=>'utf-7',
        -attachment=>'foo.gif',
        -Cost=>'$2.00');

    其中-type,-status,-expires,-cookie为可以设别的参数,其他的命名参数都被转化为html header属性。
     -expires的值可以为:
       +30s    30 seconds from now
       +10m    ten minutes from now
       +1h     one hour from now
       -1d     yesterday (i.e. "ASAP!")
       now     immediately
       +3M     in three months
       +10y    in ten years time
       Thursday, 25-Apr-1999 00:40:33 GMT  at the indicated time & date
     2. start_html 创建页面的顶层元素<html><header</header><body>
     例如:

    复制代码 代码如下:
    print start_html(-title=>'Secrets of the Pyramids',
       -author=>'[email protected]',
       -base=>'true',
       -target=>'_blank',
       -meta=>{'keywords'=>'pharaoh secret mummy',
               'copyright'=>'copyright 1996 King Tut'},
       -style=>{'src'=>'/styles/style1.css'},
       -BGCOLOR=>'blue');
     

    或者:
    复制代码 代码如下:
     print start_html(-head=>[
               Link({-rel=>'shortcut icon',href=>'favicon.ico'}),
               meta({-http_equiv => 'Content-Type',-content=> 'text/html'})
               ]
               );

    在header中加入javascript的例子:
    复制代码 代码如下:
       $query = CGI->new;
           print header;
           $JSCRIPT=<<END;
           // Ask a silly question
           function riddle_me_this() {
              var r = prompt("What walks on four legs in the morning, " +
                            "two legs in the afternoon, " +
                            "and three legs in the evening?");
              response(r);
           }
           // Get a silly answer
           function response(answer) {
              if (answer == "man")
                 alert("Right you are!");
              else
                 alert("Wrong!  Guess again.");
           }
           END
           print start_html(-title=>'The Riddle of the Sphinx',
          -script=>$JSCRIPT);
           print $q->start_html(-title=>'The Riddle of the Sphinx',
    -script=>{-type=>'JAVASCRIPT',
              -src=>'/javascript/sphinx.js'}
    );
          print $q->start_html(-title=>'The Riddle of the Sphinx',
     -script=>[
               { -type => 'text/javascript',
                 -src      => '/javascript/utilities10.js'
               },
               { -type => 'text/javascript',
                 -src      => '/javascript/utilities11.js'
               },
               { -type => 'text/jscript',
                 -src      => '/javascript/utilities12.js'
               },
               { -type => 'text/ecmascript',
                 -src      => '/javascript/utilities219.js'
               }
            ]
        );

    在header中使用css的例子:
    复制代码 代码如下:
      use CGI qw/:standard :html3/;
         #here's a stylesheet incorporated directly into the page
         $newStyle=<<END;
         <!--
         P.Tip {
             margin-right: 50pt;
             margin-left: 50pt;
             color: red;
         }
         P.Alert {
             font-size: 30pt;
             font-family: sans-serif;
           color: red;
         }
         -->
         END
         print header();
         print start_html( -title=>'CGI with Style',
                           -style=>{-src=>'//www.jbxue.com/style/st1.css',
          -code=>$newStyle}
                          );
         print h1('CGI with Style'),
               p({-class=>'Tip'},
                 "Better read the cascading style sheet spec before playing with this!"),
               span({-style=>'color: magenta'},
                    "Look Mom, no hands!",
                    p(),
                    "Whooo wee!"
                    );
         print end_html;

    四 url
      
    复制代码 代码如下:
      $full_url      = url();  #  //your.host.com/path/to/script.cgi
         $full_url      = url(-full=>1);  # //your.host.com/path/to/script.cgi
         $relative_url  = url(-relative=>1); #script.cgi
         $absolute_url  = url(-absolute=>1); #path/to/script.cgi
         $url_with_path = url(-path_info=>1);
         $url_with_path_and_query = url(-path_info=>1,-query=>1);
         $netloc        = url(-base => 1); #//your.host.com
     

     五 CGI.pm中的html元素方法的特殊用法

     如果元素的第二个参数为list类型,则会被分解,例如:
    复制代码 代码如下:
    print ul(
                  li({-type=>'disc'},['Sneezy','Doc','Sleepy','Happy'])
                );
     
     相当于:
        <ul>
          <li type="disc">Sneezy</li>
          <li type="disc">Doc</li>
          <li type="disc">Sleepy</li>
          <li type="disc">Happy</li>
        </ul>
     例如table可以写为:
    复制代码 代码如下:
      print table({-border=>undef},
                caption('When Should You Eat Your Vegetables?'),
                Tr({-align=>'CENTER',-valign=>'TOP'},
                [
                   th(['Vegetable', 'Breakfast','Lunch','Dinner']),
                   td(['Tomatoes' , 'no', 'yes', 'yes']),
                   td(['Broccoli' , 'no', 'no',  'yes']),
                   td(['Onions'   , 'yes','yes', 'yes'])
                ]
                )
             );

      六 CGI.pm中非标准的html元素方法

      print comment('here is my comment'); #generates an HTML comment (<!-- comment -->)
     因为与perl方法冲突,所以大写的:
         Select
         Tr
         Link
         Delete
         Accept
         Sub
     其他特殊的html元素方法:start_html(), end_html(), start_form(), end_form(), start_multipart_form() and all the fill-out form tags。

     七 CGI.pm中的form相关

     1 start_form 和start_multipart_form
    复制代码 代码如下:
      print start_form(-method=>$method,
                         -action=>$action,
                         -enctype=>$encoding);
           <... various form stuff ...>
         print end_form;
             -or-
         print start_form($method,$action,$encoding);
           <... various form stuff ...>
         print end_form;

    如果没有指定method,action,enctype,默认地为:
         method: POST
         action: this script
         enctype: application/x-www-form-urlencoded for non-XHTML
                  multipart/form-data for XHTML, see multipart/form-data below.
     当使用start_form的时候,enctype为application/x-www-form-urlencoded,如果需要新式的xhtml,则需要使用start_multipart_form,此时enctype为multipart/form-data。

     更多内容请参考:cgi man page //search.cpan.org/~markstos/CGI.pm-3.60/lib/CGI.pm

  • 本文相关:
  • Perl操作系统环境变量的脚本代码
  • cpan安装Net::SSH::Perl中遇到的一些问题
  • using Net::SSH2 shell 的二个方法
  • 通过perl实现一个简单的NIDS
  • perl用变量做句柄介绍
  • Perl学习基本备忘录
  • Perl 字符串处理备忘录
  • perl处理csv文件的小例子
  • perl从文件中读取数据并输出的实现代码
  • perl高级排序,&lt;=&gt;操作符,飞船操作符
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 彩票双色球历史开奖结果 - 频道导航
    Copyright © 2017 彩票双色球历史开奖结果 www.s9h6.com All Rights Reserved
  • 新规:续航150公里以下新能源车取消补贴 2019-10-11
  • 法国革命时代,女人流行穿什么 2019-10-11
  • 黑龙江省县(市、区)委统战部长培训班举办 2019-10-06
  • “夏季第一瓜”竟是它! 2019-10-06
  • 《阿古顿巴》藏语版在藏语卫视首播 2019-09-06
  • 晋中市“三同步”推动互联网治理创新 2019-08-27
  • 法媒:研究称美国人常用药物或增加抑郁风险 2019-08-27
  • 宝贝是地名,你能想到这么浪漫的地名在哪儿吗? 2019-08-15
  • 何树山副省长到方圆机电调研指导工作 2019-08-15
  • 辽宁快乐12爱彩乐走势图 捕鱼欢乐季破解版 彩金娱乐 双色球17115丹东复式 扑克接龙牌 双色球媒体擂台赛中彩网 浙江体彩6十1玩法说明 福彩中奖兑奖规则 磨丁黄金城赌场 彩种最多的彩票平台 输了6万还能回血吗 内蒙古十一选五跨度走势图 香港六合彩的派彩方式 特码表 四川时时彩直播