เขียน Perl ในสไตล์ HTML
การเขียน Perl รูปแบบมาตรฐาน
print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<title>เขียน Perl
ในสไตล์ HTML</title>\n";
print "<meta http-equiv='Content-Type' content='text/html';
charset='Windows-874'>\n";
print "</head>\n";
print "<body>"
print "<font color='#000000' size='-2' face='MS Sans Serif'>\n";
print "Hello..o.o.o.o.o.o.o.";
..................
.................
.................
print "</font>\n";
print "</body>\n";
print "</html>\n";
-
การเขียนแบบนี้
ต้องอยู่ภายใต้กฏที่เคร่งครัด
-
หากบรรทัดไหนขาดเครื่องหมาย
Semi-Colon ( ; ) ไป เจอ Error
แน่ๆ (ตัวผมเองนั่นแหล่ะ..เจอประจำเลย)
-
ดังนั้นผู้เขียน
Perl
ต้องคอยตรวจตรา
Source Code
ซ้ำแล้วซ้ำอีก
กลัวพลาด
การเขียน Perl
ในอีกรูปแบบหนึ่ง
ที่ผมได้ไปเห็นมา
print <<"(code abcdef)";
Content-type: text/html
<html>
<head>
<title>เขียน Perl
สไตล์ HTML</title>
<meta http-equiv='Content-Type' content='text/html';
charset='Windows-874'>
</head>
<font color='#000000' size='-2' face='MS Sans Serif'>
Hello..o.o.o.o.o.o.o.
..................
.................
.................
</font>
</body>
</html>
(code abcdef) <--
บรรทัดนี้เป็นบรรทัดที่ต้องระวังที่สุด
-
ให้ผลลัพท์เหมือนกับ
Source Code
ข้างบนทุกประการ
-
เริ่มต้นด้วย
print <<"(Label Name)"; -->
บรรทัดนี้เริ่มเขียนที่
Column ไหนก็ได้
- ตามด้荗ย Content-type: text/html
ต้องอยู่ติดกับบรรทัด
print <<"(Label Name)";
ต้องเริ่มต้นที่
Columnที่ 1.
เท่านั้น
-
ไส้ในเป็นแท็ก
HTML มาตรฐาน
- ภายใน荴ส้ใน
สามารถแสดงค่าตัวแปรของ
Perl
ที่ได้จากการคำนวณได้ด้วย
- จบด้ว荒 (Label Name)
-
ต้องเริ่มเขียนที่
(Label Name) ที่ Column ที่ 1
เท่านั้น (เริ่มที่ตำแหน่งอื่น
รันไม่ผ่าน)
ถ้ามีการเขียนเป็นช่วงๆ
ไม่ใช่แบบม้วนเดียวจบ
ก็สามารถทำได้เช่นกัน
เช่น
print <<"(HTML Code-XX)";
Content-type: text/html
<html>
<head>
<title>เขียน Perl
ในสไตล์ HTML</title>
<meta http-equiv='Content-Type' content='text/html';
charset='Windows-874'>
</head>
<font color='#000000' size='-2' face='MS Sans Serif'>
ทดสอบ
(HTML Code-XX)
.................................
Perl Command
.................................
if ( ........)
{
print
<<"(HTML Code-YY);
<center>
ทดสอบช่วงที่สอง.
<......>
<......>
(HTML Code-YY)
}
else
{
.................................
Perl Command
.................................
print <<"(HTML Code-XX)";
</font>
</body>
</html>
(HTML Code-XX)
- จะเห็草ว่า Label Name
สามารถใช้ซ้ำกันได้
แต่ขึ้นต้นด้วยชื่อไหน
ต้องจบลงด้วยชื่อนั้นสำหรับการพิมพ์ลงเป็นไฟล์
HTML
สามารถทำได้
ดังนี้ครับ
open (FILE, "abc.html");
print FILE <<"(HTML Code-XX)";
..................
.................
(HTML Code-XX)
มีง่ายกว่านั้นอีกหลังจากผมส่งข้อมูลหน้านี้ขึ้นไปบนเวบได้ไม่นาน
ก็มีท่านผู้เยี่ยมชมท่านหนึ่งแวะมาอ่าน
และได้แนะนำข้อมูลไว้ว่า
มีวิธี
การที่ง่ายกว่านั้นอีก
เขียนแล้ว Source Code
เป็นระเบียบ
อ่านง่ายกว่าอีกต่างหาก
วิธีการดังกล่าวคือ
print qq {
................
แท็ก HTML
................
}; -->
สังเกตุดีๆนะครับ
ต้องจบด้วยเครื่องหมาย
Semi Colon ( ; )
ในกรณีเขียนลงไฟล์
open (FILE, "abc.html");
print FILE qq {
................
แท็ก HTML
................
};
ข้อสังเกตุ
-
ต้องใช้ในรูปแบบของ
print qq { .... }; เท่านั้น
ซึ่งผมก็ไม่ทราบเหตุผลเหมือนกัน
-
อย่าลืมจบด้วย
Semi Colon ( ; ) นะครับ
ขาดเครื่องหมายนี้
โปรแกรมจะไม่ทำงาน
-
ไม่มีข้อกำหนดเรื่องตำแหน่งของ
Column
ที่อยู่ของคำสั่ง
คือ
อยู่ตรงไหนก็ได้
จะใช้เทคนิครูปแบบที่สอง
..
อ่านตรงนี้ก่อน
ผมลองใช้เทคนิคในรูปแบบที่สองแล้วครับ
ปรากฏกว่า
- IE
แสดงข้อมูลถูกต้อง
- Netscape
แสดงข้อมูลเพี้ยน
เพี้ยนอย่างไร?
ตอนผมทดสอบการเขียน
Perl
ด้วยรูปแบบที่สอง
ด้วย Netscape
ซึ่งในขณะนั้นเครื่องคอมพิวเตอร์ของผมติดตั้งโปรแกรม
- OmniHTTPd 2.06
- Perl for Win32 Build 316
อยู่ด้วย
ผลปรากฏว่า
สามารถแสดงข้อมูลได้อย่างถูกต้อง
ผมจึงส่งไฟล์ขึ้นไปอัพเดทบน
Hypermart
และลองทดสอบดูด้วย
Netscape
อีกครั้งหนึ่ง
ผลคือ Netscape
แสดงข้อมูลออกมาเป็น
Source Code แทน
อาการเช่นนี้ทำให้ผมงง
-
หากบอกว่าเกิดจาก
Netscape
ไม่รู้จักคำสั่ง
print qq { ......};
ทำไมเวลารันบนเครื่องผม
จึงทำงานได้หล่ะ
-
หากบอกว่าเกิดจาก
Perl Interpreter บน Server ของ Hypermart
ไม่รู้จักคำสั่ง
print qq { ......};
ก็ไม่ใช่อีกนั่นแหล่ะ
เพราะเมื่อใช้
IE เปิดดูแล้ว
สามารถแสดงข้อมูลได้อย่างถูกต้อง
-
ผมหาสาเหตุของการเกิดอาการเช่นนี้ไม่พบ
หากท่านผู้อ่านท่านใดทราบ
รบกวนช่วยแนะนำผมด้วยนะครับ
เป็นเรื่องที่น่าเสียดาย
เนื่องจากเทคนิคการเขียน
Perl
ในรูปแบบที่สอง
เป็นการเขียนที่ง่ายกว่า
และดูเป็นระเบียบเรียบร้อยกว่ารูปแบบที่หนึ่ง
แต่ดันไม่เวอร์คกับ
Netscape เสียนี่
ผมยังไม่ละความพยายาม
เนื่องจากผมชอบการเขียนในรูปแบบที่สองมากกว่ารูปแบบที่หนึ่ง
จึงลองนำมาใช้ผสมกัน
ปรากฏว่า "เวอร์ค"ครับ
ปัจจุบัน Souce Code
ของ Perl
ในเวบนี้
ผมใช้ในรูปแบบ
ดังนี้
print <<"(Label Name)";
Content-type: text/html
<html>
<head>
...............
..............
(Label Name)
.............................
Perl Command
.............................
print qq
{
................
แท็ก HTML
................
</head>
</html>
};
กล่าวคือ
ขึ้นต้นด้วยรูปแบบแรก
(print <<"(Label Name)";)
หลังจากนั้นใช้รูปแบบที่สอง
print qq { .... }; ตลอด
ลองเอาไปใช้ดูนะครับ
หากมีเทคนิคอะไรเพิ่มเติม
ส่งข่าวบอกให้ผมรู้ด้วยครับ