亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Perl > 正文

perl的cgi高級編程介紹

2020-10-31 15:18:46
字體:
來源:轉載
供稿:網友

一 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=>'fred@jbxue.org',
   -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=>'http://www.49028c.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();  #  http://your.host.com/path/to/script.cgi
     $full_url      = url(-full=>1);  # http://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); #http://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 http://search.cpan.org/~markstos/CGI.pm-3.60/lib/CGI.pm

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品免费在线观看| 成人写真视频福利网| 国产亚洲福利一区| 欧美片一区二区三区| 欧美激情视频一区| 亚洲免费高清视频| 高清欧美性猛交xxxx黑人猛交| 亚洲欧美另类人妖| 国产精品日韩在线| 亚洲小视频在线| 久久精品视频中文字幕| 欧美激情亚洲视频| 欧美精品一区二区三区国产精品| 国产ts人妖一区二区三区| 美女视频黄免费的亚洲男人天堂| 国外日韩电影在线观看| 97超视频免费观看| 亚洲最大的网站| 国产精品色婷婷视频| 国产在线视频一区| 国产精品视频免费在线| 91精品国产电影| 久久久影视精品| 国产精品久久久久久影视| 日韩视频一区在线| 91久久中文字幕| 97婷婷大伊香蕉精品视频| 欧美高清视频一区二区| 久久影院资源站| 色多多国产成人永久免费网站| 伦伦影院午夜日韩欧美限制| 国产精品第二页| 欧美亚洲一区在线| 欧美二区在线播放| 亚洲白拍色综合图区| 国产精品久久久久免费a∨大胸| 动漫精品一区二区| 日韩精品亚洲元码| 亚洲最新av在线网站| 亚洲人a成www在线影院| 亚洲欧洲日本专区| 亚洲精品一区中文字幕乱码| 亚洲一区二区免费| 欧美日韩国产丝袜美女| 热久久这里只有| 欧美日韩福利在线观看| 91最新在线免费观看| 成人久久久久爱| 欧美另类xxx| 国外成人在线视频| 欧美另类极品videosbestfree| 日韩成人激情视频| 欧美成人中文字幕| 亚州成人av在线| 91情侣偷在线精品国产| 久久精品久久精品亚洲人| 97精品欧美一区二区三区| 亚洲性无码av在线| 国产日韩在线免费| 日韩成人在线观看| 久久99国产精品久久久久久久久| 日韩中文理论片| 欧美黄色片视频| 色妞一区二区三区| 永久555www成人免费| 欧美黄色小视频| 国产精品久久久久久久av电影| 欧美午夜片在线免费观看| 国产精品第二页| 成人午夜一级二级三级| 欧美裸体xxxx极品少妇软件| 欧美激情视频网站| 国产日韩在线播放| 中文字幕日韩有码| 午夜免费久久久久| 国产一区二区久久精品| 久久久久久久久久国产精品| 亚洲激情视频在线观看| 日韩免费在线看| 一本色道久久综合狠狠躁篇的优点| 国产精品jizz在线观看麻豆| 国产精品欧美风情| 国产精品视频免费在线| 色综合久久久久久中文网| 97视频在线免费观看| 91精品国产高清自在线| 亚洲精品视频免费| 国产一区二区丝袜| 国产成人综合一区二区三区| 永久免费精品影视网站| 中文字幕国产精品久久| 国产精品夜色7777狼人| 91欧美激情另类亚洲| 国产热re99久久6国产精品| 国产精品免费福利| 精品一区二区三区三区| 亚洲三级免费看| 亚洲97在线观看| 动漫精品一区二区| 亚洲人成网7777777国产| 国产精品久久久久久五月尺| 欧美日韩国产中文精品字幕自在自线| 亚洲人成在线免费观看| 国产精品第10页| 亚洲人成在线一二| 欧美日韩免费在线| 欧美日韩国产成人高清视频| 国产精品欧美日韩| 精品爽片免费看久久| 欧美一级片一区| 亚洲色图偷窥自拍| 在线播放国产一区中文字幕剧情欧美| 国产视频自拍一区| 亚洲激情视频在线观看| 日韩一区二区精品视频| 国产精品爽爽ⅴa在线观看| 狠狠色狠狠色综合日日五| 国内伊人久久久久久网站视频| 久久伊人精品天天| 欧美日韩国产一区在线| 日韩电视剧免费观看网站| 日韩电影中文字幕在线| 欧美理论电影在线播放| 久久精品国产综合| 91精品久久久久久久久久久| 久久这里只有精品视频首页| 国产精品www色诱视频| 欧美xxxx综合视频| 欧美性精品220| 91九色蝌蚪国产| 国产精品普通话| 亚洲精品在线看| 日韩欧美aaa| 欧美日韩国产va另类| 欧美激情手机在线视频| 亚洲影视中文字幕| 国产做受69高潮| 色婷婷av一区二区三区久久| 亚洲精品www| 欧美在线国产精品| 18久久久久久| 久久久国产一区| 伊人伊成久久人综合网站| 国产精品久久久久久久久久三级| 川上优av一区二区线观看| 国产美女久久精品| 国产精品高潮在线| 日韩av中文字幕在线免费观看| 日韩亚洲欧美成人| 色婷婷av一区二区三区在线观看| 精品日韩视频在线观看| 黄色精品在线看| 色爱精品视频一区| 91久久精品国产91久久性色| 欧美成人中文字幕在线| 色视频www在线播放国产成人| 久久九九有精品国产23| 国产91热爆ts人妖在线| 自拍偷拍亚洲精品| 亚洲男人av电影| 久久久91精品| 日韩欧美在线视频免费观看| 国产亚洲一级高清| 性欧美xxxx视频在线观看|