แนะนำภาษา Perl และโปรแกรม CGI เบื้องต้น

Document Sample
แนะนำภาษา Perl และโปรแกรม CGI เบื้องต้น Powered By Docstoc
					                               แนะนาภาษา Perl และโปรแกรม CGI เบื้องต้น

                ภาษา Perl เป็นภาษาแบบ interpreter ใช้สาหรับเขียนโปรแกรมแบบ script
รวบรวมเอาคุณสมบัติของโปรแกรมบน UNIX หลายๆ ตัวเช่น sed, awk, grep, sh, csh, C, C++
      ่                                    ่                                   ่
ไว้เพือให้สามารถใช้ประโยชน์จากภาษา และเครืองมือต่างๆ ที่กล่าว โดยรวมให้เป็นเครืองมือเดียวกัน คาว่า Perl
มาจากคาว่า Practical Extraction and Report Language                    ถูกบัญญัติโดย Larry Wall
          ั                 ั                                                    ั
ในปัจจุบนนอกจากระบบปฏิบติการ UNIX แล้ว ยังสามารถใช้ Perl ในระบบปฏิบติการอื่นๆ ได้ด้วย เข่น
                                                                     ั
Windows NT Perl เป็นต้น ในชั้นเรียนของเรา เราจะใช้ Perl บนระบบปฏิบติการ Linux ซึ่งคาดว่ามีโปรแกรม
P                e                r             l                                   ติดตั้งไว้แล้วทั้งหมด

   ่
เริมต้นกับ Perl
     ถ้าเรามี script ชื่อ scriptname หากต้องการสั่ง run ที่ command prompt จะมีรูปแบบการใช้งานดังนี้

   $ perl scriptname

  หรือ

   $ cat scriptname | perl

     ในระบบ UNIX ถ้าเรามี text file ที่ถูก execute ได้ ซึ่งอาจเป็น shell script หรือ script ในภาษาอื่น
   ่
เพือที่จะระบุ ชนิดของโปรแกรม ที่จะ              run script         นั้น ในบรรทัดแรกของ          script
                                           ่
                                   เราจะเพิมข้อมูลในรูปแบบต่อไปนี้ไว้

   #!program [optional program arguments]

           หากทาให้ file script          ซึ่งบรรจุข้อมูลข้างต้นในบรรทัดแรกสามารถ execute ได้แล้ว
จะมีการทางานในลักษณะข้างล่างนี้เกิดขึ้น เมื่อเรียกให้        file นั้น e x e c u t e

   program [optional program aregument] scriptname

  โดยเราสามารถทราบได้ว่า program นั้นติดตั้งไว้ที่ใด โดยการใช้คาสั่งในลักษณะดังต่อไปนี้

   $ which perl
   /usr/local/bin/perl
   ในที่นี้เราได้สอบถามหาที่อยู่ของโปรแกรม Perl และเราก็ได้คาตอบว่าอยู่ที่ /usr/bin/perl ต่อไปเราจะสร้าง
                                          ่
s c r i p t ชื่อ mailform เราจะเพิมข้อความต่อไปนี้บนบรรทัดแรกของ s c r i p t f i l e

   #!/usr/local/bin/perl

                                               ่
  จัดเก็บ file mailform และใช้คาสั่งต่อไปนี้เพิมโหมด execute ต่อ file นี้ให้กับทุกๆ คน

   $ chmod +x mailform

         ิ้
ไวยากรณ์พนฐาน (Basic Syntax)
  ความต่อไปนี้ เป็นจริงสาหรับการเขียนโปรแกรมภาษา Perl ทุกโปรแกรม

       เป็นภาษาแบบ free form บรรดา whitespace ทั้งหลายไม่มีความหมาย ข้อความสั่งภาษา Perl
จะต้องจบประโยคด้วย semicolon (;) เหมือนภาษา C                ข้อความสั่งหมายเหตุ (Comments)
   ่           ่                                    ่
เริมต้นด้วยเครืองหมาย pound (#) ทุกๆอย่างหลังจากเครืองหมาย # จะไม่ถูกกระทาการใดๆ โดย Perl
     ่
เครืองหมาย                          #                                             ่
                                                                  ไม่จาเป็นต้องเริมต้นที่ต้นบรรทัด

  ให้ดูตัวอย่างการใช้ข้อความสั่งหมายเหตุ จากโปรแกรมต่อไปนี้

   #!/usr/local/bin/perl
   # mailform - a sample program for my class
   #
   # Tawatchai Iempairote
   # twatchai@iempairote.compsci.buu.ac.th
   # June, 1998

                                                                          ุ
  ถ้าสั่ง run script ข้างต้น จะไม่มีอะไรเกิดขึ้น ทั้งนี้เนื่องจากในขณะนี้ทกอย่างเป็นข้อความสั่งหมายเหตุ

โปรแกรม Hello World ! ด้วย Perl
                โปรแกรมต่อไปนี้เป็นโปรแกรม สาหรับการแสดงข้อความว่า                       Hello World      !
                                                 ่        ้
                          ตามธรรมเนียมเมื่อเราเริมทาความรูจักกับภาษาใหม่

   #!/usr/local/bin/perl
   # helloworld - a sample program for my class
   #
   # Tawatchai Iempairote
   # twatchai@iempairote.compsci.buu.ac.th
   # June, 1998
   print "Hello World ! \n";

ตัวแปร (Variables) ในภาษา Perl
   ในภาษา Perl มีตัวแปรเพียงไม่กี่ชนิด มีประเภทใหญ่ๆ ดังนี้

   1. Scalar
   2. Array
   3. Associative Arrays (Hashes)

การใช้ตัวแปรแบบ Scalar
                    เป็นตัวแปรที่ใช้สาหรับเก็บข้อมูลเดี่ยวๆ ที่เป็น     Integer     หรือ     String
การกาหนดตัวแปรประเภทนี้ไม่จาเป็นต้องประกาศตัวแปรก่อน โดยสามารถใช้ได้เลย
                                   ่
ชื่อของตัวแปรประเภทนี้ถูกนาด้วยเครืองหมาย           dollar          ($)   ให้ศึกษาจากตัวอย่างต่อไปนี้

   #!/usr/local/bin/perl
   $myname = "Tawatchai Iempairote";
   $myage = 28;
   $myoffice = "Computer Science Dept.";
   print "I am $myname, now my age is $myage\n";
   print "I work at $myoffice ..\n";

การใช้ตัวแปรแบบ Array
                                                                                             ่
    เป็นตัวแปรที่ใช้สาหรับเก็บข้อมูลเป็นชุด หรือเป็นแถวเรียง กัน ชื่อของตัวแปรจะถูกนาด้วยเครืองหมาย @
                                       ให้ศึกษาจากตัวอย่างต่อไปนี้

   # Next I will show how to use array variables
   @mycourse = ("310211","310213","310417","315425","310303","310101","310201");
   print "This semester I teach the following courses\n";
   print "\t\t$mycourse[0]\n";
   print "\t\t$mycourse[1]\n";
   print "\t\t$mycourse[4]\n";
   print "In fact I teach all courses : @mycourse\n";
การใช้ตัวแปรแบบ Associative Array
                                                    ่
        เป็นตัวแปรที่ใช้สาหรับเก็บข้อมูลแบบ array ทีมีข้อมูลในแต่ละ e l e m e n t สัมพันธ์กันเป็นคู่
                              ่
ชื่อของตัวแปรจะถูกนาด้วยเครืองหมาย               %             ให้ศึกษาจากตัวอย่าง         ต่อไปนี้

   # Also I will show you here how to use Associative array
   %course = ("310211","Computer Science I","310213","Computer Science II", "310417
   ","Selected Topics","315425","Object Oriented Analysis","310303","Computer in Bu
   siness");
   print "The course name are : %course\n";
   print "I love to teach $course{'310213'}\n";
   print "and $course{'315425'}\n"

ผลจากการ run โปรแกรมตัวอย่างแสดงชนิดข้อมูลทั้ง 3 แบบข้างต้น

   I am Tawatchai Iempairote, now my age is 28
   I work at Computer Science Dept. ..
   This semester I teach the following courses
               310211
               310213
               310303
   In fact I teach all courses : 310211 310213 310417 315425 310303 310101 310201
   The course name are : %course
   I love to teach Computer Science II
   and Object Oriented Analysis

การรับข้อมูลจากผู้ใช้
      ใ น ภ า ษ า P e r l จะใช้ <STDIN> ซึ่งเป็น standard input สาหรับรับข้อมูลจากคีย์บอร์ด
                            โปรดศึกษาวิธีใช้จากโปรแกรมต่อไปนี่

   #!/usr/local/bin/perl
   # We will show the Standard Input
   # We use "<STDIN>" as the purpose
   # I will ask your information, please answer me
  print "Please enter your name and surname : ";
  $name = <STDIN>;
  print "Hello $name .... How old are you now : ";
  $age = <STDIN>;
  print "You age is $age Do you think are you old ?";

  ต่อไปนี้ จะแสดงผลที่เกิดขึ้นจากการ run โปรแกรมข้างต้น

  Please enter your name and surname :

      ่                          ้
  เครืองจะรอถาม ข้อมูล สมมุติให้ปอน Tawatchai Iempairote แล้วกด Enter

  Please enter your name and surname : Tawatchai Iempairote
  Hello Tawatchai Iempairote
  .... How old are you now :

              ่
  คราวนี้ เครืองจะรอถามข้อมูลอีก สมมุติว่าป้อน 28 แลัวกด Enter ผลลัพท์สุดท้ายจะเป็นดังนี้

  Please enter your name and surname : Tawatchai Iempairote
  Hello Tawatchai Iempairote
  .... How old are you now : 28
  You age is 28
  Do you think are you old ?

การใช้ Perl กับงานคานวณ
  เราสามารถทาการคานวณด้วยภาษา Perl ได้ ต่อไปนี้เป็นตัวอย่างโปรแกรม ที่ใช้ Perl กับงานคานวณ

  #!/usr/local/bin/perl
  # We will show you here how Perl can do calculation
  print "\nHi, what is your midterm score : ";
  $midscore = <STDIN>;
  print "\nAnd how much final score you get : ";
  $finalscore = <STDIN>;
  # Now calculate 30% midterm and 70% final
  $totalscore = ($midscore * .30) + ($finalscore * .70);
   print "\nYou got $totalscore %, Good Luck";

                 ท่านควรจะนาไปทดลองดูว่า โปรแกรมข้างต้นทางานถูกต้อง ตามประสงค์หรือไม่
นอกจากนั้นท่านควรจะนาโปรแกรมตัวอย่างโปรแกรม ทุกๆ            โปรแกรม ไปทดลองทาดูด้วย

                   ้                    ุ
       ในการเรียนรูภาษาคอมพิวเตอร์ใหม่ทกภาษา เราจาเป็นจะต้องทาความเข้าใจกับ ข้อความสั่งที่ใช้ควบคุม
                                                          ่
c o n t r o l f l o w s ที่ใช้ในภาษานั้น ซึ่งเรืองที่ต้องทราบได้แก่ เงื่อนไข และการทาซ้า
                     ่
ในชั่วโมงนี้เราจะเริมต้นด้วยการทาความเข้าใจกับ ข้อความสั่งต่อไปนี้

      if / if ... else
      while / do
      for
      foreach

                     ่                          ้
          ซึ่งเป็นเรืองที่เรามีความคุ้นเคย อยู่บางแล้ว จากการเรียนภาษาคอมพิวเตอร์อื่น หลังจากนั้น
เราจะศึกษาถึงงานที่นา Perl ไปใช้ประโยขน์กันมาก นั่นคือการเขียนโปรแกรม CGI ด้วย P e r l

ข้อความสั่ง if และ if else
           ่
     ใช้เพือตัดสินใจเลือกทิศทางของ control flow ไปทางใดทางหนึ่งขึ้นอยู่กับผลการหาค่าจากเงื่อนไข ว่าเป็น
t r u e                                                       ่              ่
                        หรือ false สิ่งที่ควรให้ความสนใจในเรืองนี้ ได้แก่เครืองหมายการเปรียบเทียบ
ซึ่งมีความแตกต่างกันระหว่าง การเปรียบเทียบ             number           และการเปรียบเทียบ        string
                                     ขอให้ศึกษาจากตารางข้างล่างนี้




                                              $y Numbers               Strings
                  $x เท่ากับ                  $x == $y                 $x eq $y
                  $x ไม่เท่ากับ $y            $x != $y                 $x ne $y
                  $x มากกว่า $y               $x > $y                  $x gt $y
                  $x มากกว่าหรือเท่ากับ $y    $x >= $y                 $x ge $y
                  $x น้อยกว่า $y              $x < $y                  $x lt $y
                  $x น้อยกว่าหรือเท่ากับ $y   $x <= $y                 $x le $y
                  $x เปรียบเทียบกับ $y        $x <=> $y                $x cmp $y
                    (return -1,0,1)
  ศึกษาการเปรียบเทียบ numbers จากโปรแกรมตัวอย่างต่อไปนี้

   #!/usr/local/bin/perl
   print "Enter score : ";
   $score = <STDIN>;
   if ($score >= 90 ) {
      print "\n You got A\n";
   }elsif ($score >= 80) {
      print "\n You got B\n";
   }else{
      print "\n You got F\n";
   }

  โปรแกรมตัวอย่างต่อไปนี้ เป็นตัวอย่างการเปรียบเทียบแบบ string

   #!/usr/local/bin/perl
   print "Enter your name : ";
   $name = <STDIN>;
   chop($name);
   if ($name lt "C") {
       print "\n Hello, $name, you have to goto the AB queue\n";
   }elsif($name gt "U") {
       print "\n Hello, $name, you have to goto the UVWXYZ queue\n";
   }elsif($name eq "Tawatchai") {
       print "\n Welcome, $name, come inside\n";
   }else{
       print "\n Hi ,$name, please go to the middle queue\n";
   }

               ฟังก์ชั่น chop($name) จะช่วยตัดอักขระตัวสุดท้ายที่เราป้อนเข้าไป คือ   Enter   ออก
ซึ่งจาเป็นที่จะต้องตัดออกก่อนที่เราจะนาไป เปรียบเทียบกับสตริงอื่น
ข้อความสั่ง while / do
   ข้อความสั่ง while/do ใช้ในการทาซ้าตามเงื่อนไขที่กาหนด มีรูปแบบการใช้งานดังนี้

   while (EXPRESSION) {
          STATEMENTS;
   }
   และ
   do {
         STATEMENTS;
   } while (EXPRESSION);

              ในรูปแบบแรก จะทาการตรวจเงื่อนไขก่อนที่จะเข้ากระทาการใน         loop ส่วนในรูปแบบที่สอง
จะมีการกระทาการใน                  loop             หนึ่งรอบก่อน ที่จะมีการตรวจสอบเงื่อนไข
            เราสามารถใช้ข้อความสั่ง last ซึ่งมีความหมายคล้ายกับ break ในภาษา C และ next
                                                 ่                             ่
ซึ่งมีความหมายคล้ายกับ continue ในภาษา C เพือสั่งให้ออกจาก loop หรือให้เริมต้นในรอบใหม่ของ loop
                                                ได้ด้วย
    ดูตัวอย่างโปรแกรมข้างล่างนี้

   #!/usr/local/bin/perl
   # Now I will teach you "while" statements
   $answer = 10;
   while ($answer != 20) {
     print "You are in loop no: $answer:\n";
     $answer++;
   }

ข้อความสั่ง for
   รูปแบบทั่วไปของคาสั่ง มีดังนี้

  for (INITIAL_EXPR; COND_EXPR; LOOP_EXPR) {
        STATEMENTS;
  }
  จะต้องใช้วงเล็บปีกกาครอบ body loop เสมอ ดังตัวอย่างโปรแกรมต่อไปนี้
  #!/usr/local/bin/perl
  # This is example of For Loop
   $mylover = "Rugporn";
   for ($count=0; $count <= 10; $count++) {
      print "Krisana and $mylover are twin\n";
   }
ข้อความสั่ง foreach
   ข้อความสั่งนี้มีประโยชน์ ในการจัดการ elements ใน array มีรูปแบบทั่วไปของคาสั่งดังนี้

   foreach SCALAR (LIST) {
           STATEMENTS;
   }

  ทุกๆ รอบใน loop SCALAR จะเปลี่ยนเป็น element ต่อไปใน LIST ให้ศึกษาจากตัวอย่างต่อไปนี้

   #!/usr/local/bin/perl
   # This is the lesson of foreach command
   @departments = ("Seree Chinodom","Tawatchai Iempairote","Tomkanok Jantarujirakor
   n","Kantima Onlaor","Wichai Bunjua","Krisana Chinasarn","Jira Jaturanon");
   foreach $aloop (@departments) {
        print "Welcome Ajan $aloop\n";
   }

การเขียนโปรแกรม CGI เบื้องต้น
                                                      ่
 ภาษา Perl เหมาะสาหรับการเขียน CGI script มาก เราจะเริมต้นด้วยการบอกชนิดของเอกสาร HTML ดังนี้

   #!/usr/local/bin/perl
   print "Content-type:text/html\n\n";

   ต่อไปก็เป็นเนื้อหาของโปรแกรม CGI ของท่านสมมุติว่า ท่านต้องการแสดงข้อความว่า "Hello ! Burapha"
                                       ก็สามารถทาได้ดังนี้

   print "<h1>Hello ! Burapha </h1>";

  จัดเก็บ file นี้ให้มีส่วนขยายเป็น .cgi ทาการเปลี่ยนโหมดให้ file ถูก execute โดยใครก็ได้ก็จะกลายเป็น CGI
s c r i p t                         แล้ว สามารถทดลองเรียกดูได้ด้วย          B r o w s e r
แบบฟอร์มและการ Submit
   การ submit ฟอร์ม คือการส่งข้อมูลที่อยู่ภายในฟอร์มนั้น ไปประมวลผลที่ server ด้วยโปรแกรมที่ระบุใน
attribute action ของ tag <form..> ตัวอย่างเช่น

   <form method=POST action="hr06d.cgi">

     เมื่อมีการ submit ฟอร์ม ข้อมูลที่อยู่ภายในฟอร์ม จะถูกนาไปเก็บไว้บนตัวแปรที่ชื่อ CONTENT_LENGTH
ซึ่งเป็นตัวแปรบน        server          ตัวหนึ่ง ให้พิจารณาโปรแกรม              hr06d.cgi    ข้างล่างนี้

   #!/usr/local/bin/perl
   print "Content-type:text/html\n\n";
   print "<body bgcolor='white'>\n";
   print "<h4>read data from CONTENT_LENGTH</h4><p>";
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
   print "<h4>data is $buffer</h4><p>";

   จากโปรแกรมข้างต้น ข้อความสั่ง read จะอ่านข้อมูลจาก standard input (STDIN) จากตัวแปร
CONTENT_LENGTH เข้ามาเก็บไว้ที่ $buffer ทั้งนี้ให้เป็นที่เข้าใจว่าจะมีการอ่านข้อมูลเมื่อมีการ submit
                                ให้พิจารณาจากฟอร์มต่อไปนี้

   <form method=POST action="hr06d.cgi">
   Enter text : <input type=text name="text">
   <input type=submit><input type=reset>
   </form>

       เมื่อกรอกข้อมูลลงในฟอร์ม แล้วคลิ๊กที่ submit จะเรียก cgi ชื่อ h r 0 6 d . c g i มาทางาน
                                 ท่านควรจะนาไปทดลองทาดูด้วยตนเอง

                                                               ่
              เรามาทาความเข้าใจเกี่ยวกับการรับข้อมูลจากฟอร์มเพิมเติม นั่นคือเมื่อท่าน   submit ฟอร์ม
ข้อมูลที่ถูกป้อนลงในฟอร์ม จะมีลักษณะเป็นคู่ดังนี้

   ค่าของ attribute name=ข้อมูลที่ถูกป้อน

  ดังในตัวอย่างฟอร์มข้างต้นหากป้อนข้อความว่า Tawatchai Iempairote ผลที่จะปรากฏในตัวแปรคือ

   text=Tawatchai+Iempairote
   ทั้งนี้ คาว่า "text" เป็นค่าของ attribute name ที่ระบุไว้ใน tag <input ..> และข้อมูลที่ถูกป้อน คือ Tawatchai
                                                          ่
Iempairote โดยจะแทนที่ตาแหน่งของ space ด้วยเครืองหมาย + แต่หากในฟอร์มมี elements มากกว่าหนึ่ง
                                                                   ่
ข้อมูลในตัวแปร CONTENT_LENGTH จะถูกแบ่งด้วยเครืองหมาย & ให้ทานทดสอบฟอร์มต่อไปนี้        ่

   <form method=POST action="hr06d.cgi">
   Enter First Text : <input type=text name="firsttext">
   Enter Next Text : <input type=text name="nexttext">
   <input type=submit><input type=reset>
   </form>

  ผลที่ได้จากการ submit ฟอร์มนี้ จะมีลักษณะดังนี้

   read data from CONTENT_LENGTH

   data is firsttext=Tawatchai+Iempairote&nexttext=Kanniga+Iempairote

การจัดการข้อมูลที่ได้จากฟอร์ม
            ่
         เพือให้การจัดการข้อมูลที่ได้จากฟอร์มสะดวกขึ้น เราควรจะเก็บข้อมูลจากฟอร์มไว้ในตัวแปร แบบ
Associative array                                              เราสามารถใช้โปรแกรมย่อยต่อไปนี้ช่วยได้

   sub readform {
     read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
     @inputpairs = split(/&/,$buffer);
     foreach $inputpair (@inputpairs) {
       ($name,$value) = split(/=/,$inputpair);
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
        $value =~ s/~!/~!/g;
        $FORM{$name}=$value;
     }
   }

  ตัวอย่างต่อไปนี้แสดงตัวอย่างการใช้โปรแกรมย่อยข้างต้น
  #!/usr/local/bin/perl
  print "Content-type:text/html\n\n";
  &readform;
  print "name is $FORM{'name'}<p>";
  print "dept is $FORM{'dept'}<p>";
  sub readform {
     read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
     @inputpairs = split(/&/,$buffer);
     foreach $inputpair (@inputpairs) {
       ($name,$value) = split(/=/,$inputpair);
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
        $value =~ s/~!/~!/g;
        $FORM{$name}=$value;
     }
  }

  โปรแกรม CGI ข้างบนนี้ได้ทดสอบแล้วกับฟอร์มต่อไปนี้

  <form method=POST action="hr06i.cgi">
  Name : <input type=text name="name">
  Dept : <input type=text name="dept">
  <input type=submit><input type=reset>
  </form>

  ผลที่ได้จากการกรอกฟอร์มและ submit เป็นดังนี้

  name is Tawatchai Iempairote

  dept is Computer Science

การจัดการกับไฟล์ ในภาษา Perl
ให้ศึกษาข้อกาหนดของ Perl จากตารางข้างล่างนี้
 Conventions for opening files
 "FILE" หรือ "<FILE"                     Open FILE for input
 ">FILE"                                 Open FILE for output , creating if necessary
">>FILE"                                    Open FILE for appending
 "+>FILE"                                   Open FILE with read/write access
"| CMD"                                     Open a pipe to CMD
"CMD |"                                     Open a pipe from CMD

         ่
  ก. ให้ทานศึกษาวิธีการจัดการกับไฟล์จากตัวอย่างต่อไปนี้

  #!/usr/local/bin/perl
  # Open new file and add two line of data
  open(FILE,">lab04a.dat");
  print FILE "Burapha University is not bad\n";
  print FILE "The students here are all good students\n";
  close(FILE);

                                                             ่
                      ในโปรแกรมข้างต้นเป็นการเปิดไฟล์ใหม่ เพือบันทึกข้อความ                2      บรรทัด
                               ่
                           ให้ทานทดสอบโปรแกรมนี้แล้วตอบคาถามต่อไปนี้

                                                     ่
    1.ข้อความสั่งใดเป็นการเปิดไฟล์ชื่อ lab04a.dat เพือเขียน โดยหากมีไฟล์เก่าอยู่แล้ว จะลบไฟล์เก่าทิ้งก่อน
    2.ข้อความสั่งใดเป็นการปิดไฟล์
    3.ให้แสดง contents ของ lab04a.dat

  ข. กาหนดโปรแกรมให้ดังนี้

  #!/usr/local/bin/perl
  #Read from exiting file
  open(FILE,"lab04a.dat");
  @buffer = <FILE>;
  print @buffer;
  close(FILE);

  จากการทดลองใช้โปรแกรมข้างต้นให้ตอบคาถามต่อไปนี้

                                                             ่
    1.ข้อความสั่ง open(FILE,"lab04a.dat"); เป็นการเปิดไฟล์เพือการใด
    2.ให้แสดง contents ของตัวแปร @buffer หลังจากทาข้อความสั่ง @buffer = <FILE>;
    3 .อยากทราบว่าหากใช้ตัวแปรแบบ scalar แทน array นั่นคือใช้ $buffer แทน @buffer แล้ว
                                 จะมีผลเช่นใดในโปรแกรม




ค. กาหนดโปรแกรมให้ดังนี้

  #!/usr/local/bin/perl
  #Write some variables into file
  print "Please enter your name :";
  $name = <STDIN>;
  print "Please enter your code :";
  $code = <STDIN>;
  print "Please enter your GPA :";
  $gpa = <STDIN>;
  chop($name,$code);
  open (FILE,">lab04c.dat");
  print FILE $name,$code,$gpa;
  close(FILE);

  ให้ทดลองใช้โปรแกรมข้างต้น และตอบคาถามต่อไปนี้

    1.เมื่อรันโปรแกรมนี้แล้ว contents ของ lab04c.data จะเป็นอย่างไร
    2.เหตุใดจึงใช้ chop($name,$code); และทาไมไม่มี $gpa ในคาสั่งนี้
    3.คาว่า FILE ในโปรแกรมจะเปลี่ยนเป็นคาอื่นได้ไหม

  ง. ให้พิจารณาโปรแกรมต่อไปนี้

  #!/usr/local/bin/perl
  #Add records into file
  #Read and show the exiting record
  open (FILE, "lab04c.dat");
  @buffer = <FILE>;
  print @buffer;
  close(FILE);
   #Promt new data
   print "Please enter your name :";
   $name = <STDIN>;
   print "Please enter your code :";
   $code = <STDIN>;
   print "Please enter your GPA :";
   $gpa = <STDIN>;
   chop($name,$code);
   open (FILE,">>lab04c.dat");
   print FILE $name,$code,$gpa;
   close(FILE);

                            ่
  เมื่อทดลองใช้งานดูแล้วให้ทานแก้ไขโปรแกรมนี้ ให้ทางานแบบวนรอบ (loop) จนกว่า ผู้ใช้จะป้อนชื่อว่า END
และอยากทราบว่า ข้อความสั่ง o p e n ( F I L E , " > > l a b 0 4 c . d a t " ) ; จะมีผลอย่างไรในโปรแกรม

           ่
   จ. ให้ทานรัน cgi program ที่ http://iempairote.compsci.buu.ac.th/~twatchai/310213/lab03/visitor.cgi
ดูผลที่ได้ cgi program           ดังกล่าวเขียนด้วย p e r l              ดังได้แสดง source code
ไว้ข้างล่างนี้            ่
                      ให้ทานศึกษาและนาไปติดตั้งใน           home directory                   ของท่าน

   #!/usr/local/bin/perl
   # Counter CGI
   open(COUNT,"visitor.dat");
   $count=<COUNT>;
   close(COUNT);
   $count++;
   open(COUNT,">visitor.dat");
   print COUNT "$count";
   close(COUNT);
   print "Content-type:text/html\n\n";
   print "<body bgcolor='white'>";
   print "<h2>You are user no: $count that run this cgi </h2>";
   print "</body>";

          ่
   ฉ. ให้ทานเรียก html page ที่
http://iempairote.compsci.buu.ac.th/~twatchai/310213/lab03/lab03f.html
โดย page นี้เรียกโปรแกรม cgi ข้างล่างนี้ ใช้เมื่อ submit form

   #!/usr/local/bin/perl
   print "Content-type:text/html\n\n";
   &readform;
   print "name is $FORM{'name'}<p>";
   print "<br>";
   print "dept is $FORM{'dept'}<p>";
   print "<br>";
   if ($FORM{'email'} eq ""){
       print "<h2>You have to enter email address</h2>";
   }else {
       print "email is $FORM{'email'}";
       print "<br>";
       open(EMAILFILE, ">>email.dat");
       print EMAILFILE "$FORM{'email'}\n";
       close(EMAILFILE);
   }

   sub readform {
     read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
     @inputpairs = split(/&/,$buffer);
     foreach $inputpair (@inputpairs) {
       ($name,$value) = split(/=/,$inputpair);
        $value =~ tr/+/ /;
         $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
        $value =~ s/~!/~!/g;
        $FORM{$name}=$value;
     }
   }

      ่
  ให้ทานศึกษาวิธีการจากโปรแกรมตัวอย่างแล้วดาเนินการต่อไปนี้

                         ่
     1.สร้างแบบฟอร์มเพือรับข้อมูล ชื่อ-สกุล รหัสประจาตัว GPA จากผู้ใช้
                                 ่
     2.เขียน perl cgi program เพือเขียนข้อมูลดังกล่าวลงไฟล์
                            ่
3.เขียน perl cgi program เพืออ่านข้อมูลจากไฟล์ที่สร้างขึ้น มาจัดแสดงบน web page ให้สวยงาม

				
DOCUMENT INFO