       CGI   PERL.

       12          
Perl.         Perl    
 CGI.   ,      
    Perl  CGI,     .
 ,        
  Perl.
        ,      CGI,    
   .       
Web-,     ,   -
  WEB,       ,  
     .     
       
   ,      -
       .    -
  Perl   ,   -
       
.         
CGI-   Perl.         
    :

?  Perl        -
      ,   
     ,   C  ++.

?   5  Perl    ,  
  -    -
     .

        Perl   CGI- -
?

             -
  ,    CGI       Perl
        -
 CGI-.       
 Perl   CGI-   ,  Perl
         ,
        
.   , Perl     -
      .  
CGI        :  
,     ,  HTML--
  .  .
      CGI-,     Perl,     
      -
,    C++.          ,
Perl      .    
,  Perl      Perl  -
         -
  Windows, UNIX, MS, DOS.  To ,   Perl -
 6ec,    .  -
 Perl   ,      -
   ,     C++.       -
       
    .      -
  Perl,         
  escape-,   -
   .  ,    -
    Perl,    taintperl,
  -     -
  .         taintperl
   Web-,     .

      CGI-
      UNIX-    , -
   Perl,    .   ,  
    -    -
.  ,   DOS  Windows,   -
    Perl .        
   ,     Perl 
 .      -
 (.     T-   -
  Perl.   HTTP ,  
 CGI      cgi-bin.     
      URL,  :

        http://your-domain/cgi-bin/your-script

:  URL   cgi-bin,      
      .     -
      HTTP.

      GI-   UNIX
            cgi-bin   
,     ,  -
  URL.     .  
 ,      , -
       Perl:

        #!/usr/bin/perl

:        ,  -
  ,   Perl   .

    ,      
chmod:

chmod  +x your-srcipt

         PERL  DOS  WINDOWS
      DOS  Windows  Perl       -
  .     
   PERL.EXE,      
 Perl   .      -
  -    ,     -
 PERL.    ,  .  -
,  ,    - HELLO.  -
 :

        @echo off
        perl Hello.pl %1 %2 %3 %4 %5 %6 %7 %8 %9

      ,   Perl Hello.PL  -
 :

print "Hello, args are '@ARGV'\n";

        ,    -      
PERL.EXE    Hello.PL      -
 .       Perl  Web--
,   ,       HTTP-  
   Perl (,    FolkWeb- ),
      -.  -
,     HTTP-  FolkWeb,    
  -      CGI-  
 Perl.             
-.
       -   -   -
    Perl,     - (
 HELLO.)      cgi-bin        -    Perl
(Hello.PL).

        HTML-    PERL
              Perl
   .        
,      L   -
  .  ,      
  ,   Hello, world:

print "Content-type: text/plain\n\n";
print "Hello, world\n";

        HTML   . -
,        HTML:

print <<HTML;
Content-type: text/html

<HTML>
<HEAD><TITLE>Test Using HTML</TITLE></HEAD>
<BODY>
<H1><CENTER>
Hello, world
</CENTER></H1>
</BODY></HTML>
HTML


            HTML,      
   Perl.  ,        -
 ,    HTML-.   -
    Perl,     -
   ,      .
      <<HTML      HTML  -
    ,      <->   (here
document),       
shell  UNIX.  <>      -
  .  Perl   <->  
   .   <->  -
    Perl   ,    -
       HTML-.
  <->,     Perl -
        ,    
   printf.  <-> -
        .

         
         CGI-    
 ,     .   CGI -
   Web .   11  -
    C++,    ,   
   .       
Perl   .   ,   ,  -
      Perl,     
++ ,    11:

print <<HTML;
Content-type: text/html

<HTML>
<HEAD><TITLE>Echo Environment Variables </TITLE></HEAD>
<BODY>
<H3><CENTER>
Environment Variables:<HR>
</CENTER></H3>
for $env (sort keys %ENV)
{
print "<LI>$env is $ENV{$env}<BR>";
                }

print "</BODY></HTML>\n"

         ,     
   ,   
HTML-.   ,     
<->     print.

        
       11  ,       
CGI      .   -
  HTTP-   URL.      
 ,       (?)  URL,  
 .
     CGI-           
.        ,    -
   ,     -
     QUERY_STRING.   -
,       ,   
     ,   ,
  .

       HTML    GET.
       ,    ISINDEX   -
    .        
        
.     Perl  . 
 GET,        
  URL,      ISINDEX.  -
  GET  ISINDEX   ,    -
  GET       
   ,        (&).
         ,    
     .  ,    -
    (,      )    
 (Bob,  27,  11-1-68),      -
                              :
<name=Bob&age==27&birthday=l 1-1-68>.     
            -
 HTML-:

        ($cgi_bin, $cgi_script) = ($0 =~ m:(.*)[/\\](.*):);
        $query = $ENV{QUERY_STRING};

        if ($query eq '')
        {
                #  
                print <<FORM;
Content-type: text/html
<HTML>
<HEAD><TITLE>Sample GET Form </TITLE></HEAD>
<BODY>
What is your query? <P>
<FORM METHOD="GET" ACTION="$cgi_script">
A checkBox. <BR>
<INPUT TYPE="checkbox" NAME="chek" VALUE="on"><P>

A radio button set. <BR>
<INPUT TYPE="radio" NAME="button" VALUE="1"> 1<BR>
<INPUT TYPE="radio" NAME="button" VALUE="2"> 2<BR>
<INPUT TYPE="radio" NAME="button" VALUE="3"> 3<P>
A data entry field<BR>
<INPUT NAME="field"><P>

Send the data.<BR>
<INPUT TYPE="submit">
</FORM>
</HTML>
FORM
        }
else  {
        #  
        print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>GET Form Result</TITLE></HEAD>\n"
print "<BODY>\n";
print "Your query values:<P>\n";
@fields = split('&', $query);
forech (@field) {
        Switch: {
                /^check=(.*)/ && do {
                        $check = $1;
                        last Switch;
                };
                /^button=(.*)/ && do {
                        $button = $1;
                        last Switch;
                };
                /^field=(.*)/ && do {
                        $field = $decode(1);
                        last Switch;
                };
        }
}

        print "Check Box: $check<BR>\n";
        print "Radio Button: $button<BR>\n";
        print "Data Field:", &html($field), "<BR>\n";
        print "<HTML>\n";
}

        sub decode{
                local ($value) = @_;
                $value =~ s/\+/ /g;
                $value =~ s/%([0-9A-H]{2})/pack('C',hex($1))/eg;
                return $value;
                }
        sub html {
                local ($value) = @_;
                $value =~ s/</&lt;/g;
                $value =~ s/>/&gt;/g;
                return $value'
                }

          :

($cgi_bin, $cgi_script) = ($0 =~ m:(.*)[/\\](.*):);

               
 .        
    .          -
     ,      -
.       ,   
      .
      ,      ,
  ,     .  -
         ,    -
  split.          
  .   :

forech (@field) {
Switch: {
        /^check=(.*)/ && do {
                $check = $1;
                last Switch;
        };


        foreach   {$VAR). 
 foreach   ,  Perl  -
   $_.  ,    
    $VAR=~/PATTERN/.   -
   ,  Perl  $_      
,        -
  .        
 ,      Perl   .   
    ,    -
,       .
           ,    
 /^field=(.  *)/.        -
     ,     -
     .  ,    
 (=)    .   
       
  $1.   $1    -
,            
.      decode    
  ,    .  -
 ,   , -
   .
     ,    html,   -
        HTML.   
        HTML-  
 -  .        HTML  -
   (<>)   L-,  
   ,   HTML
&lt;  &gt;.

      HTML-    POST
            ,
  ,       POST 
    CGI.   POST   -
   ,    ,  
  .   POST   , 
     ,     GET
   ,       URL
.
                -
  sys-read    .    -
           CONTENT_LENGTH.
      ,  -
          -
 .    ,     ,
        -
  :

($cgi_bin, $cgi_script) = ($0 =~ m:(.*)[/\\](.*):);
$content_length = $ENV(CONTENT_LENGTH);

if (!definet($query) || $query eq '') {
        #  
                print <<FORM;
Content-type: text/html
<HTML>
<HEAD><TITLE>Sample POST Form </TITLE></HEAD>
<BODY>
What is your query? <P>
<FORM METHOD="POST" ACTION="$cgi_script">
A checkBox. <BR>
<INPUT TYPE="checkbox" NAME="chek" VALUE="on"><P>

A radio button set. <BR>
<INPUT TYPE="radio" NAME="button" VALUE="1"> 1<BR>
<INPUT TYPE="radio" NAME="button" VALUE="2"> 2<BR>
<INPUT TYPE="radio" NAME="button" VALUE="3"> 3<P>
A data entry field<BR>
<INPUT NAME="field"><P>

Send the data.<BR>
<INPUT TYPE="submit">
</FORM>
</HTML>
FORM
        }
else  {
        #  
        print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>POST Form Result</TITLE></HEAD>\n"
print "<BODY>\n";
print "Your query values:<P>\n";
@fields = split('&', $query);
forech (@field) {
                /([^=](.*)/ && do {
                local ($filed, $value) = ($1, $2);
                $query{$field} = &decode($value);
        }
}

        print "Check Box: $query{check}<BR>\n";
        print "Radio Button: $query{button}<BR>\n";
        print "Data Field:", &html($query{field}), "<BR>\n";
        print "<HTML>\n";
}

        sub decode{
                local ($value) = @_;
                $value =~ s/\+/ /g;
                $value =~ s/%([0-9A-H]{2})/pack('C',hex($1))/eg;
                return $value;
                }
        sub html {
                local ($value) = @_;
                $value =~ s/</&lt;/g;
                $value =~ s/>/&gt;/g;
                return $value'
                }

             -
      :
                /([^=](.*)/ && do {
        local ($filed, $value) = ($1, $2);
        $query{$field} = &decode($value);
}

              -
 .         -
 .       -
,     .     -
 [^=]   .      (^)  
 ,     ,       
 .         
  [=].         
 : <    ,  -
           
  , >.

           CGI-LIB        PERL    
 .

       Perl cgi-lib.pl   
CGI-.      ,    
    ReadParse,   
    .       
cgi-lib  ,          
 (ISINDEX, GET, POST)   ,     -
     .
      ,     PrintHeader,    HtmlTop,
HtmlBot   HTML-,   -
     ,    .   
cgi-lib          require.
   cgi-lib.pl   ,      
    Perl  (  C:\PERL\LIB    DOS-  
Windows)      ,    -
  .      
        cgi-lib.pl             Web-
http://www.bio.cam.ac.uk/cgi-lib

     
           ,     Perl
     CGI.    -
,     ,   -
   ,   ,  
    Web.   14    -
 Java.   ,   Java    -
  Web,      .    -
  14       -
JavaScript.          14,    -
,      :
? Perl       -
,        CGI  
Web,       -
.

?  Perl     ,    
   ,       -
     .    -
    Web.

?       Perl   -
 .

?     Web      -
 Perl.   ,  JavaScript  VBScript,  -
    Perl.

      WEB-     GI-  
 PERL
      Web-      -
   Perl   CGI-,  -
   .    
       Web.
http://www.globalserve.net/~brent/tech/perl/index.html
         - Watermarks:   Perl

http://iamwww.unibe.ch/~scg/Src/ -   SCG

http://sunsite.unc.edu/jem/source.html -  

http://www.metronet.com:70/1/perlinfo/scripts -   Perl
           

http://worldwidemart.com/script/ -   

http://www.bio.cam.ac.uk/cgi-lib/ - Home  CGI-LIB.PL

scan & edit by eastwood. eastwood@shadrinsk.zaural.ru
http://www.shadrinsk.zaural.ru/~eastwood