1. พื้นฐานการใช้งาน Perl

คุณจะได้เรียนรู้

  1. การเรียกใช้ perl จาก Command line ของ DOS
  2. สร้างโปรแกรม CGI อย่างง่ายๆ ให้แสดงผลที่หน้าจอบราวเซอร์ได้
  3. การเรียกใช้โปรแกรม CGI โดยใช้บราวเซอร์
  4. การลดปริมาณการใช้คำสั่ง print
  5. การเขียน comment หรือหมายเหตุในโปรแกรม
  6. ข้อควรระวังในการใช้เครื่องหมาย @ และ " ในโปรแกรม CGI

เนื่องจาก Perl ก็คล้ายโปรแกรมบน DOS โปรแกรมหนึ่ง เวลาที่ทำงานจะทำงานอยู่เบื้องหลัง ถ้าไม่มีการเรียกใช้ ก็จะไม่ทำงาน เราสามารถเรียกใช้ใน Perl ด้วย Command line แบบคำสั่ง DOS ได้ ลองทำดูแล้วกันจะได้เห็นภาพ ให้คุณเปิด Notepad แล้วพิมพ์ print "hello my perl"; จากนั้น save ไฟล์ โดยใช้ชื่อ test.pl ไว้ที่ใหนก็ได้ยกเว้น desktop แล้วเข้าไปที่ DOS prompt   ใช้คำสั่ง cd ของ DOS ย้ายไป directory ที่คุณเก็บไฟล์  test.pl ไว้ พิมพ์คำว่า  perl test.pl ที่ DOS prompt จากนั้นกด Enter 1 ครั้ง คุณก็จะพบกับคำว่า hello my perl   ที่ได้พิมพ์ไป   ถ้าคุณยังต้องการลองอีกผมมีให้อีก 5 ไฟล์ คลิ้กเพื่อ download ได้เลยครับทุกไฟล์ขนาดไม่เกิน 1 kb
play1.pl - play2.pl - play3.pl - play4.pl - play5.pl

หลังจากที่เราลองเรียกโปรแกรมภาษา Perl โดยใช้ Command line แล้วก็พอแค่นี้แล้วกันนะครับ เพราะไม่ใช่จุดประสงค์ที่เราจะเรียนรู้กัน จริงๆที่เราต้องการเรียนคือการใช้ภาษา perl เขียนโปรแกรม CGI ที่สามารถแสดงผลออกมาที่ Browser ได้จะทำอย่างไรนั้นมาดูกันเลยครับ ให้คุณเปิดไฟล์ test.pl ขึ้นมาอีกครั้งแล้วเติม code เหล่านี้ลงไปให้ได้ผลทั้งหมดออกมาดังนี้นะครับ

print "Content-type:text/html\n";
print "<html><head><title></title></head>
\n";
print "<body>
\n";
print "hello my perl
\n";
print "</body></html>
\n";

หมายเหตุ ส่วนที่เป็น
\n คือคำสั่งการขึ้นบันทัดใหม่ ถ้าไม่ใส่ก็ไม่เป็นไรแต่ผลของโปรแกรมที่ส่งมาให้บราวเซอร์ เมื่อ view source ดูเห็นติดกันหมดเป็นบันทัดเดียว

เมื่อเสร็จแล้วให้ save as เป็นไฟล์ test2.pl โดยไฟล์นี้ให้เก็บไว้ใน directory ที่คุณกำหนดไว้ให้เป็น
cgi-bin หรือ directory อื่นที่สามารถ execute ไฟล์ได้ (ห้ามงงนะผมบอกก่อนแล้วว่าใครจะเรียน
ต้องมีพื้นฐานมาบ้าง ถ้างงให้ไปอ่านในส่วนของ ASP ก่อนจะอยู่ในหัวข้อย่อย แนะนำ -> กำหนดคุณสมบัติของ Folder) จากนั้นให้คุณพิมพ์เรียกในบราวเซอร์ดังนี้ http://you-server-name/cgi-bin/test2.pl อย่าซื่อนะครับ you-server-name คือชื่อ server ที่คุณตั้งไว้ ถ้าไม่รู้ให้แทนส่วนนี้ด้วยเลข 127.0.0.1 ซึ่งส่วนมากจะใช้ได้ และถ้าคุณไม่ได้ใช้ cgi-bin ให้แทนด้วยอันอื่นที่คุณใช้เช่น script เป็นต้น เน้น!! การเรียกใช้ test2.pl หรือไฟล์ .pl อื่นๆที่จะสอนต่อไปให้เรียกจาก server เท่านั้น โดยการพิมพ์เรียกลักษณะดังตัวอย่าง การเปิดแบบเปิดไฟล์ มันจะไม่ทำงาน(ไม่เชื่อลองดู) เมื่อคุณเรียกโดยผ่านบราวเซอร์แล้วจะปรากฎเป็นคำว่า hello my perl ขึ้นมาบนหน้าจอ จะเห็นว่าในขณะนี้คุณสามารถใช้ perl เขียนโปรแกรมให้แสดงข้อความบนหน้าจอ บราวเซอร์ได้แล้ว เรามาดูรายละเอียดกันว่าทำไมถึงได้ และได้มาอย่างไร

ข้อตกลง ต่อไปเมื่อคุณพบลิ้งค์ให้ download ไฟล์ที่มีนามสกุล .pl และ .txt ให้คุณ download และ save ไฟล์เหล่านั้นไว้ใน cgi-bin ของคุณ แต่ถ้าเป็นไฟล์ .htm ให้เก็บไว้ที่ root ของเว็บไซต์คุณในเครื่อง

เมื่อคุณกดปุ่ม Enter บราวเซอร์จะรับที่อยู่ URL ของ test2.pl ไปส่งให้ web server จากนั้น web server จะเรียก perl.exe ซึ่งเป็นตัวแปรภาษา perl ให้ทำการแปรคำสั่งในไฟล์ test2.pl เมื่อ perl.exe แปรเสร็จแล้ว จะส่งผลออกมาให้ web server และทำการปิดตัวเองลง เมื่อ web server ได้รับผลมาแล้ว จะส่งผลนั้นกลับไปให้บราวเซอร์ที่เรียกในรูปของ html ไฟล์ เนื่องจากใน test2.pl มีการกำหนดคำสั่งด้วย print "Content-type:text/html\n\n"; เพราะฉะนั้นการที่จะเขียน cgi ด้วย perl ให้แสดงผลที่หน้าจอบราวเซอร์จะต้องใส่คำสั่ง print "Content-type:text/html\n\n"; ลงไปด้วย

หมายเหตุ สำหรับผู้ใช้ UNIX ต้องใส่บันทัดแรกของทุกโปรแกรมด้วย #!/usr/bin/perl หรือที่คล้ายๆแบบนี้ ซึ่งบันทัดนี้คือคำสั่งที่บอกให้ server ไปเรียกโปรแกรมสำหรับแปลภาษา Perl ให้ทำงาน ง่ายๆก็คือที่อยู่ของตัวโปรแกรม perl.exe นั่นเอง ถ้าไม่รู้ให้ถามผู้ดูแล server หรือ ใช้คำสั่ง whereis perl สำหรับผู้ใช้ Windows 95/98/NT ไม่จำเป็นต้องใส่ อย่างนี้ 95/98/NT ฉลาดกว่า UNIX รึเปล่า ?

พอถึงตรงนี้ถ้าคุณเกิดความคิดว่าจะนำไฟล์ play*.pl มาดัดแปลงทำแบบไฟล์ test2.pl บ้าง เสียใจนะครับ ยังทำไม่ได้ตอนนี้ อย่าพึ่งใจร้อนดูส่วนต่อๆไปก่อนนะครับ ต่อไปเราลองมาเขียนหน้าที่มันใหญ่กว่านี้ดู ดังต่อไปนี้นะครับ

print "Content-type:text/html\n\n";
print "<html><head><title>เขียน CGI ด้วย Perl</title></head>";
print "<body bgcolor=\"black\" text=\"white\">";
print "<center>";
print "ข้อความที่ต้องการแสดงบนหน้าจอบราวเซอร์ ถ้ามีเครื่องหมาย \@ หรือเครื่องหมาย \"<br>";
print "คุณจะต้องใช้เครื่องหมาย \ ใส่ไว้ข้างหน้าเครื่องหมายดังกล่าวด้วย ถ้าไม่ใส่จะเกิด error ขึ้น<br>";
print "ในการใช้ภาษา Perl ถ้าคุณต้องการใส่ comment ให้ใช้เครื่องหมาย # ใส่ไว้ข้างหน้าบันทัดที่<br>";
print "ต้องการ comment ดูตัวอย่างที่กล่าวมาแล้วทั้งหมดได้ใน source code ของไฟล์นี้ (test3.pl)<br>";
print "</center>";
print "</body></html>";


copy source code ข้างบนนี้แล้ว paste ลงใน notepad แล้ว save เป็นไฟล์ test3.pl จากนั้นลองเรียกดูด้วย บราวเซอร์นะครับ เป็นไปตามที่บอกไว้ในไฟล์นะครับ ถึงตรงนี้ถ้าคุณเกิดความคิดขึ้นมาอีกว่า ไม่ต้องใช้คำสั่ง print กันตายเหรอ? ถ้ามีไฟล์ใหญ่ๆ ข้อความมากๆ คำตอบคือตายครับ ถ้าคุณใช้คำสั่ง print ผมมีวิธีแก้ให้ไม่ต้องใช้คำสั่ง print ดัง code ต่อไปนี้ครับ

print "Content-type:text/html\n\n";
print <<myHTML;
<html><head><title>เขียน CGI ด้วย Perl</title></head>
<body bgcolor=\"black\" text=\"white\">
<center>
ข้อความที่ต้องการแสดงบนหน้าจอบราวเซอร์ ถ้ามีเครื่องหมาย \@ หรือเครื่องหมาย \"<br>
คุณจะต้องใช้เครื่องหมาย \ ใส่ไว้ข้างหน้าเครื่องหมายดังกล่าวด้วย ถ้าไม่ใส่จะเกิด error ขึ้น<br>
ในการใช้ภาษา Perl ถ้าคุณต้องการใส่ comment ให้ใช้เครื่องหมาย # ใส่ไว้ข้างหน้าบันทัดที่<br>
ต้องการ comment ดูตัวอย่างที่กล่าวมาแล้วทั้งหมดได้ใน source code ของไฟล์นี้ (test4.pl)<br>
</center>
</body></html>
myHTML

# จะเห็นว่าแบบนี้ใช้คำสั่ง print น้อยลง ส่วนที่เป็นคำว่า myHTML จะเปลี่ยนเป็นคำอื่นที่คุณต้องการ
# ก็ได้ เช่น ENDHTML เป็นต้น จาก code จะเห็นว่าต้องใส่ myHTML สองที่คือเริ่มต้นและสิ้นสุด
# ดูในตัวอย่างนะครับ

copy source code ข้างบนนี้แล้ว paste ลงใน notepad แล้ว save เป็นไฟล์ test4.pl จากนั้นลองเรียกดูด้วย บราวเซอร์นะครับ เป็นไปตามที่บอกไว้ในไฟล์นะครับ แต่จะเห็นว่าง่ายกว่าตั้งเยอะ ระวังเครื่องหมาย @ และ " ในไฟล์ด้วยนะครับถ้ามีต้องใส่ \ ไว้ข้างหน้า เช่น  print "<a href=\"http://www.thaitop.com\">HOME</a>"; หรือ print "<a href=\"mailto:webmaster\@thaitop.com\">Mail Me</a>";

by thaitop.com

  © 2000, Integrated World Tech Co.,Ltd , All Rights Reserved. Thairegister is a service mark of In and Intergrated World Tech Co.,Ltd. Additional copyright and trademark information.