logo

บทเรียน ONLINE : การเขียนภาษา PERL
[ การทำชุดรวม link+copy ไปใช้ 3 วิธี ]
บริการนี้เปิดตรง ๆ ได้ที่ http://www.thaiall.com/link
    วิธีการ copy ไปใช้ 3 แบบ
  1. วิธีแรก : save as หน้าหลักของ ชุด link ไปเลย แล้วไม่ต้องแก้อะไรทั้งสิ้น ซึ่งมี 2 แบบ คือแบบ frame เดียว และแบบหลาย frame แล้วแต่ว่า ท่านจะชอบใจแบบไหน และถ้า copy ไปแล้วไม่ต้องห่วงเรื่องการ update เพราะท่านจะสามารถ update ได้เสมือนของท่าน คือขอเพิ่ม หรือลบ ได้ โดยทางทีมงานจะหมั่นปรับปรุงให้ท่านเอง
    [click ขวาที่นี่ แบบหลาย frame หรือ click ขวาที่นี่ แบบ frame เดียว] แล้ว save as ไปได้เลย
  2. วิธีที่สอง : save as หน้าหลักของ ชุด link ไปเลย แต่ให้ปรับปรุง แฟ้มที่ copy ไป นิดหน่อย แล้วไปแก้การอ้างถึงแฟ้ม atop.htm ซึ่งเป็นส่วนหัวของหน้า link จากนั้นให้ท่านสร้าง atop.htm ในเว็บของท่าน เพื่อใช้แสดง logo ของเว็บท่าน ส่วนเนื้อในนั้น ท่านก็ไม่ต้องห่วงเรื่องของการ update ทางทีมงานจะคอย update ให้ท่านเมื่อท่านเพิ่ม link เข้าไป หรือจะส่ง mail มาคุยกับ ทีมงานบ่อย ๆ เราก็ยินดี
    [click ขวาที่นี่ แบบหลาย frame หรือ click ขวาที่นี่ แบบ frame เดียว] แล้ว save as ไปได้เลย
  3. วิธีที่สาม : save as เฉพาะฐานข้อมูลที่เป็น thaiall.txt ซึ่งมีโครงสร้างแฟ้มเป็น text ธรรมดา แล้วไปเขียน perl สนับสนุนเพิ่มเติม ตามชุด source code ข้างล่าง ท่านเพียงหา editor ดี ๆ มาเปิด และสามารถปรับปรุงแก้ไข ได้โดยง่าย หรือจะนำไปใช้กับ asp โดย import เข้าไปใน mdb ก็ย่อมทำได้ แต่เมื่อท่าน save as แฟ้ม thaiall.txt มาแล้ว ท่านจะต้อง copy source code ข้างล่างนี้ ไปเป็นแฟ้มต่าง ๆ ที่ผมจะอธิบายให้ฟัง และต้องทำการบริหารข้อมูลด้วยตนเอง นั่นคือ ท่านมีอิสระเต็มที่ ไม่ต้องเกรงใจผม ผมทำข้อมูลให้ท่าน copy ไปใช้ให้เกิดประโยชน์ต่อตัวท่าน และสังคม แต่ต่อไปอย่ามาหาว่าผม copy ท่านมานะครับ เพราะข้อมูลทั้งหมดนี้ ผม copy มาจากแหล่งรวม link มากมาย จำไม่ได้ จนไม่สามารถทำ reference ได้
    [click ขวาที่นี่] แล้ว save as ไปได้เลย

    ความสามารถของชุด link นี้
  1. ท่าน สามารถ search หาข้อมูลในฐานข้อมูล โดยใช้คำอะไรก็ได้ ซึ่งจะไปค้นหาทั้งใน url และชื่อของเว็บโดยละเอียด
  2. ท่าน สามารถแจ้งเพิ่มเว็บใหม่ได้ โดยตัวท่านเอง ผมจะทำการย้ายไปยังกลุ่มที่เหมาะสม ในภายหลัง
  3. เมื่อเพิ่มเข้าไปแล้ว ท่านจะไม่เห็นผล จนกว่าจะสั่ง update ด้วย crtlink.pl แล้วจะแสดงผลในส่วนของ เว็บมาใหม่ ขวาสุด
  4. หากเห็นว่าเว็บใด หมดอายุ หรือ link เสีย สามารถแจ้งให้ทีมงานทราบ โดยจะเหมือนกับ เว็บมาใหม่ แต่จะเป็นอักษรเข้ม ทีมงานจะตรวจสอบก่อน
  5. การ เพิ่มหรือลบ link จริง ๆ ท่านจะทำไม่ได้ จนกว่าที่จะ copy ฐานข้อมูล และโปรแกรมไปใช้ ในเว็บที่ให้บริการ perl โดยท่านต้องบริหารเอง

  1. ข้อควรทราบ
  2. crtlink.pl สำหรับ ปรับปรุงหน้ารวม link ทั้งแบบ one frame และ many frame
  3. i.pl สำหรับ เรียก link ที่ต้องการตามรหัสเว็บที่เรียกไป
  4. work.pl สำหรับ สืบค้นข้อมูล link เพิ่ม ลบ link ทั้งแบบผู้ใช้ และแบบผู้บริหารหน้าฐานข้อมูล
  5. แบบฝึกหัด
ข้อควรทราบ
  1. บริการนี้ ถูกเขียนขึ้น โดยมีแรงจูงใจที่ต้องการ ทำเว็บสักหน้าหนึ่ง ให้ผู้สืบค้นอะไร สามารถเข้ามาหาไปใช้ได้โดยง่าย ถึงแม้ผมจะทำบริการสืบค้น หรือจะสืบค้นจาก yahoo แต่ก็ยังต้องอาศัย key ที่ตรงกับสิ่งที่ต้องการ แต่จุดเด่นของการรวม link คือการแสดงรายชื่อเว็บให้เห็นกันชัด ๆ ทำให้ตัดสินใจเลือกได้ง่าย จากชื่อที่เห็นขณะนั้น ได้ทันที
  2. นอกจากจะทำบริการให้ ผู้สนใจเข้ามาใช้แล้ว ผมยังนำ source code และ ฐานข้อมูล มาแสดง ให้สามารถ copy ไปใช้ได้โดยง่าย เพราะต้องการให้คนไทย ใช้เวลาเรื่องนี้ให้น้อย แต่หันไปทำอะไรที่มีประโยชน์ หรือสร้างสรรค์สิ่งใหม่ ๆ มากยิ่ง ๆ ขึ้น
  3. ระบบรวม link ที่นำมาแสดง ถูกนำเสนอใน 2 รูปแบบคือ แบบ one frame คือแสดงทุก link ใน frame ย่อยด้านล่าง เพียง 1 frame (click here ดูผล) และอีกแบบคือ many frame ซึ่งจะทำการแยกชุด link ไว้ 5 กลุ่ม แต่ละกลุ่มอยู่กันคนละ frame ทำให้ใช้เวลา download ได้เร็ว (click here ดูผล)
  4. สำหรับแฟ้มที่ใช้ในระบบนี้มีด้วยกัน 6 แฟ้ม คือ
    • index.html เป็นการนำเสนอ link ทั้งหมดในแบบ many frame
    • link.htm เป็นการนำเสนอ link ทั้งหมดในแบบ one frame
    • atop.htm เป็น frame ด้านบนสุด สำหรับบริหารฐานข้อมูล ใช้ในทั้ง many frame และ one frame
    • link0.htm เป็นด้านล่างของ frame ใน link.htm ซึ่งรวมทุก link ในหน้าเดียว
    • link1.htm link2.htm link3.htm link4.htm และ link9.htm เป็น การแยก link ตามกลุ่ม สำหรับ many frame
    • crtlink.pl เป็นโปรแกรมที่ถูกสั่งงาน ผ่านคำว่า update ในส่วน atop.htm ซึ่งจะสร้าง link?.htm ทั้ง 6 แฟ้มใหม่
    • i.pl เป็นโปรแกรมสำหรับเรียก link จากฐานข้อมูล thaiall.txt ทำให้จัดการข้อมูลได้อย่างเป็นระเบียบ
    • work.pl เป็นโปรแกรมทำหน้าที่ สืบค้น เพิ่ม และลบ link จากฐานข้อมูล thaiall.txt
    • thaiall.txt เป็นฐานข้อมูลหลัก ที่รวม link ทั้งหมดไว้ในแฟ้มเดียว
  5. แฟ้ม thaiall.txt แยกเป็นบรรทัดละ url โดยประกอบด้วย 3 เขตข้อมูลคือ รหัสเว็บ ที่อยู่เว็บ และชื่อเว็บ เช่น
    1110001:www.thaiall.com:ไทยออล
    1110002:www.thainame.net:ชื่อเว็บภาษาไทย
    1110003:www.thaiabc.com:เว็บลูกสาว
    เป็นต้น ซึ่งท่านสามารถ copy แฟ้มนี้ไปใช้ โดย import เข้าไปใช้ใน mdb หรือ excel ก็ยังได้ แฟ้มนี้อยู่ที่ www.thaiall.com/link/thaiall.txt ถ้าต้องการ copy แฟ้มนี้ ให้ [click ขวาที่นี่] แล้ว save as ไปได้เลย

crtlink.pl
สำหรับ ปรับปรุงหน้ารวม link ทั้งแบบ one frame และ many frame
ประโยชน์และหน้าที่ของ crtlink.pl
โปรแกรมนี้ ทำหน้าที่แยกข้อมูลจากแฟ้ม thaiall.txt มาใส่ไว้ในแฟ้ม link1.htm link2.htm link3.htm link4.htm link9.htm
และยังทำหน้าที่ นำ link ทั้งหมดจาก thaiall.txt ไปใส่ไว้ในแฟ้ม link0.htm แฟ้มเดียว ทำเกิดบริการ one frame ขึ้น
บริการนี้ ท่านสามารถเรียกมาใช้ได้ ด้วยตัวของท่าน ถึงแม้เป็นผู้ใช้ธรรมดาก็ตาม โดยเรียกจากคำว่า update
บน frame ด้านบน ซึ่งอยู่ในแฟ้ม atop.htm เมื่อท่าน click คำว่า update จะทำให้เกิดการสั่งประมวลผลแฟ้ม crtlink.pl
ซึ่งทำหน้าที่สร้างแฟ้ม link?.htm ทั้ง 6 แฟ้ม เพื่อให้ index.htm และ link.htm เรียกไปใช้เป็น frame ย่อยต่อไป
Source code ของ crtlink.pl
#!/usr/local/bin/perl
# 1110000:www.thaiall.com:ไทยออล
$i=0;
$i++;$ar1[$i]="<b>การศึกษา+ราชการ</b>";
$i++;$ar1[$i]="111.มหาวิทยาลัย";
$i++;$ar1[$i]="112.วิทยาลัย";
$i++;$ar1[$i]="113.สถาบันราชภัฏ";
$i++;$ar1[$i]="114.สถาบันฯ";
$i++;$ar1[$i]="115.โรงเรียน";
$i++;$ar1[$i]="116.สอนเสริม+ติว";
$i++;$ar1[$i]="121.ราชสำนัก";
$i++;$ar1[$i]="122.กระทรวง";
$i++;$ar1[$i]="123.ทบวง-กรม";
$i++;$ar1[$i]="124.กอง";
$i++;$ar1[$i]="125.สำนักงาน";
$i++;$ar1[$i]="126.สถาบันฯ";
$i++;$ar1[$i]="127.การ";
$i++;$ar1[$i]="128.ศูนย์";
$i++;$ar1[$i]="131.สมาคม";
$i++;$ar1[$i]="132.มูลนิธิ";
$i++;$ar1[$i]="133.องค์กร+องค์การ";
$i++;$ar1[$i]="134.รวมรุ่น+เพื่อน";
$i++;$ar1[$i]="141.การเมือง";
$i++;$ar1[$i]="199.อื่นๆในกลุ่ม";
$end1=$i;
$i=0;
$i++;$ar2[$i]="<b>ธุรกิจ+สารพัดฟรี</b>";
$i++;$ar2[$i]="211.Pager";
$i++;$ar2[$i]="212.TV";
$i++;$ar2[$i]="213.ISP";
$i++;$ar2[$i]="214.Free.hosting";
$i++;$ar2[$i]="215.Free.mail";
$i++;$ar2[$i]="216.Free.search";
$i++;$ar2[$i]="217.Free.image";
$i++;$ar2[$i]="218.Shareware";
$i++;$ar2[$i]="219.Cartoon";
$i++;$ar2[$i]="221.สอน Online";
$i++;$ar2[$i]="222.รับ ออกแบบเว็บ";
$i++;$ar2[$i]="223.รับ วางระบบ";
$i++;$ar2[$i]="224.รับ เขียนโปรแกรม";
$i++;$ar2[$i]="225.ขาย Computer";
$i++;$ar2[$i]="226.ขาย Software";
$i++;$ar2[$i]="227.ขาย หนังสือ";
$i++;$ar2[$i]="228.ขาย CE";
$i++;$ar2[$i]="229.E-commerce";
$i++;$ar2[$i]="231.ห้างสรรพสินค้า";
$i++;$ar2[$i]="232.ร้านอาหาร";
$i++;$ar2[$i]="233.รถยนต์";
$i++;$ar2[$i]="234.โรงแรม";
$i++;$ar2[$i]="235.กีฬา";
$i++;$ar2[$i]="236.ภาพยนต์";
$i++;$ar2[$i]="237.สะสมของ";
$i++;$ar2[$i]="238.ข่าวรับสมัครงาน";
$i++;$ar2[$i]="239.การเงิน";
$i++;$ar2[$i]="241.ศาสนา";
$i++;$ar2[$i]="242.เพชร+ทอง+แร่";
$i++;$ar2[$i]="243.เพาะปลูก+เกษตร";
$i++;$ar2[$i]="244.Ceramic";
$i++;$ar2[$i]="245.Handmake";
$i++;$ar2[$i]="246.นำเข้า-ส่งออก";
$i++;$ar2[$i]="251.หนังสือพิมพ์";
$i++;$ar2[$i]="252.นิตยสาร";
$i++;$ar2[$i]="253.วิทยุ";
$i++;$ar2[$i]="261.สุขภาพ";
$i++;$ar2[$i]="271.ดูดวง";
$i++;$ar2[$i]="299.อื่นๆในกลุ่ม";
$end2=$i;
$i=0;
$i++;$ar3[$i]="<b>ธุรกิจระดับโลก</b>";
$i++;$ar3[$i]="311.คอมพิวเตอร์";
$i++;$ar3[$i]="312.รถยนต์";
$i++;$ar3[$i]="313.มหาวิทยาลัย";
$i++;$ar3[$i]="314.องค์กร";
$i++;$ar3[$i]="321.ภาพยนต์";
$i++;$ar3[$i]="322.ดาราชาย";
$i++;$ar3[$i]="323.ดาราหญิง";
$i++;$ar3[$i]="331.สำนักข่าว";
$i++;$ar3[$i]="399.อื่นๆในกลุ่ม";
$end3=$i;
$i=0;
$i++;$ar4[$i]="<b>ท่องเที่ยว+จังหวัด</b>";
$i++;$ar4[$i]="411.เว็บไทย.com";
$i++;$ar4[$i]="412.เว็บไทย.net";
$i++;$ar4[$i]="413.เว็บไทย.org";
$i++;$ar4[$i]="414.เว็บไทย.co.th";
$i++;$ar4[$i]="415.เว็บไทย.in.th";
$i++;$ar4[$i]="416.เว็บไทย.net.th";
$i++;$ar4[$i]="421.ทะเล";
$i++;$ar4[$i]="422.ภูเขา";
$i++;$ar4[$i]="431.รวมทุกจังหวัด";
$i++;$ar4[$i]="441.ภาคเหนือ";
$i++;$ar4[$i]="442.ภาคกลาง";
$i++;$ar4[$i]="443.ภาคตะวันออก";
$i++;$ar4[$i]="444.ภาคอีสาน";
$i++;$ar4[$i]="445.ภาคใต้";
$i++;$ar4[$i]="499.อื่นๆในกลุ่ม";
$end4=$i;
$i=0;
$i++;$ar9[$i]="<b>เพื่อนเว็บ+มาใหม่</b>";
$i++;$ar9[$i]="911.เพื่อนเว็บ";
$i++;$ar9[$i]="951.เว็บมาใหม่";
$end9=$i;
$filelink = join '',"/data1/hm/thaiall.com","/link/thaiall.txt";
open(fn, "<$filelink" );
@rf = <fn>;
close(fn);
$size=@rf;
$cntar[1]=0;
$cntar[2]=0;
$cntar[3]=0;
$cntar[4]=0;
$cntar[9]=0;
for $i (0 .. $size-1) {
   if ( substr($rf[$i],0,1) eq "1" ) {  $cntar[1]++; }
   if ( substr($rf[$i],0,1) eq "2" ) {  $cntar[2]++; }
   if ( substr($rf[$i],0,1) eq "3" ) {  $cntar[3]++; }
   if ( substr($rf[$i],0,1) eq "4" ) {  $cntar[4]++; }
   if ( substr($rf[$i],0,1) eq "9" ) {  $cntar[9]++; }
}
$lf = "<br>";
$ft = '<a name=bottom><hr></a></body></html>';
$topbottom= "[<a href=#top>บน</a>.<a href=#bottom>ล่าง</a>.<a href=#top target=_blank>ขยาย</a>]<br><br>\n";
print "Content-type: text/html","\n\n";
print'<html><head><title>www.thaiall.com/link/ คือรวม link ชุดเต็ม</title></head>';
print'<body><a name=top></a><font face="ms sans serif">ปรับปรุงเรียบร้อยแล้วครับ .. คราวนี้ก็ reload ได้แล้ว';
# link1.htm link2.htm link3.htm link4.htm link9.htm
$lnk="1"; @ar = @ar1; $end = $end1; $hd="#ffffdd"; &crtmain;
$lnk="2"; @ar = @ar2; $end = $end2; $hd="#ddffdd";  &crtmain;
$lnk="3"; @ar = @ar3; $end = $end3; $hd="#ffddff";  &crtmain;
$lnk="4"; @ar = @ar4; $end = $end4; $hd="#ddffff";  &crtmain;
$lnk="9"; @ar = @ar9; $end = $end9; $hd="#ddddff";  &crtmain;
&crtonehead;
$lnk="1"; @ar = @ar1; $end = $end1; $hd="#ffffdd"; &crtone;
$lnk="2"; @ar = @ar2; $end = $end2; $hd="#ddffdd";  &crtone;
$lnk="3"; @ar = @ar3; $end = $end3; $hd="#ffddff";  &crtone;
$lnk="4"; @ar = @ar4; $end = $end4; $hd="#ddffff";  &crtone;
$lnk="9"; @ar = @ar9; $end = $end9; $hd="#ddddff";  &crtone;
print fn $ft;
close(fn);	
exit;
# =============================
sub crtonehead {
   $file1 = join '',"/data1/hm/thaiall.com","/link/link0.htm";
   if (-e $file1) { unlink "$file1"; }	
   open (fn,">$file1");
   print fn '<body bgcolor=#ffffdd><font face="ms sans serif" size=0>';
   #
   print fn $ar1[1],' : <font color=#c0c0c0>จำนวนในกลุ่ม:_',$cntar[1],'</font><br>';
   for $i (2 .. $end1) {
      if ( substr($ar1[$i],0,1) eq "1" )
	     { print fn "• <a href=#",substr($ar1[$i],0,3),">",substr($ar1[$i],4,50),"</a> ";}
   }  print fn "<br>";
   print fn $ar2[1],' : <font color=#c0c0c0>จำนวนในกลุ่ม:_',$cntar[2],'</font><br>';
   for $i (2 .. $end2) {
      if ( substr($ar2[$i],0,1) eq "2" )
	     { print fn "• <a href=#",substr($ar2[$i],0,3),">",substr($ar2[$i],4,50),"</a> ";}
   }  print fn "<br>";
   print fn $ar3[1],' : <font color=#c0c0c0>จำนวนในกลุ่ม:_',$cntar[3],'</font><br>';
   for $i (2 .. $end3) {
      if ( substr($ar3[$i],0,1) eq "3" )
	     { print fn "• <a href=#",substr($ar3[$i],0,3),">",substr($ar3[$i],4,50),"</a> ";}
   }  print fn "<br>";
   print fn $ar4[1],' : <font color=#c0c0c0>จำนวนในกลุ่ม:_',$cntar[4],'</font><br>';
   for $i (2 .. $end4) {
      if ( substr($ar4[$i],0,1) eq "4" )
	     { print fn "• <a href=#",substr($ar4[$i],0,3),">",substr($ar4[$i],4,50),"</a> ";}
   }  print fn "<br>";
   print fn $ar9[1],' : <font color=#c0c0c0>จำนวนในกลุ่ม:_',$cntar[9],'</font><br>';
   for $i (2 .. $end9) {
      if ( substr($ar9[$i],0,1) eq "9" )
	     { print fn "• <a href=#",substr($ar9[$i],0,3),">",substr($ar9[$i],4,50),"</a> ";}
   }  print fn "<br>";
}
sub crtone {
   print fn "<hr>",$topbottom;
   for $i (2 .. $end) {
	 print fn "<a name=",substr($ar[$i],0,3),"></a>";
	 print fn "<b>",$ar[$i],"</b><br>";
	 $j = 0;
	 while ($j < $size) {
		if (substr($ar[$i],0,3) eq  substr($rf[$j],0,3)) {
		  @r = split /:/,$rf[$j];
		  print fn "<a href=i.pl?",$r[0]," target=_blank>",substr($r[2],0,length($r[2])-1),"</a> + ";
	   }
	   if (substr($ar[$i],0,3) < substr($rf[$j],0,3)) { $j = 9999999; }
	   $j++;
	 }
	 print fn $topbottom;
   }
}
# =============================
sub crtmain {
   $file1 = join '',"/data1/hm/thaiall.com","/link/link",$lnk,".htm";
   if (-e $file1) { unlink "$file1"; }	
   open (fn,">$file1");
   print fn '<body bgcolor=',$hd,'><font face="ms sans serif" size=0>';
   print fn $ar[1],$lf,'<font color=#c0c0c0>จำนวนในกลุ่ม:_',$cntar[$lnk],'</font><br>';
   for $i (2 .. $end) {
      if ( substr($ar[$i],0,1) eq $lnk ) {
	      print fn "• <a href=#",substr($ar[$i],0,3),">",substr($ar[$i],4,50),"</a><br>";
      }
   }
   print fn "<hr>",$topbottom;
   for $i (2 .. $end) {
      if ( substr($ar[$i],0,1) eq $lnk ) {
      	 print fn "<a name=",substr($ar[$i],0,3),"></a>";
         print fn "<b>",$ar[$i],"</b><br>";
         $j = 0;
         while ($j < $size) {
            if ( substr($rf[$j],0,1) eq $lnk ) {
      		    if (substr($ar[$i],0,3) eq  substr($rf[$j],0,3)) {
                  @r = split /:/,$rf[$j];
		          print fn "<a href=i.pl?",$r[0]," target=_blank>",substr($r[2],0,length($r[2])-1),"</a><br>\n";
               }
               if (substr($ar[$i],0,3) < substr($rf[$j],0,3)) { $j = 9999999; }
            }
		    $j++;
         }
         print fn $topbottom;
      }
   }
   print fn $ft;
   close(fn);	
}
# =============================

i.pl
สำหรับ เรียก link ที่ต้องการตามรหัสเว็บที่เรียกไป
ประโยชน์และหน้าที่ของ i.pl
ท่านอาจสงสัยว่าทำไม ไม่ใส่ url จริง ๆ ลงไปในแฟ้ม link ทั้ง 6 ซะทีเดียว เหตุที่ไม่ใส่เข้าไปก็เพราะไม่ต้องการ
ให้แฟ้ม link มีขนาดใหญ่จนเกินความจำเป็น และยังทำให้แนวคิดในการบริหารฐานข้อมูลได้ง่าย จึงได้ทำ link
ให้ผ่านคำสั่ง i.pl และเหตุผลที่สำคัญอีกประการหนึ่งคือ ไม่ต้องการให้ copy ไปใช้ง่าย ๆ โดยไม่ต้องศึกษาอะไรเลย
แต่ถ้าจะ copy ผมก็จะอธิบายวิธีการ copy ไปใช้ให้เข้าใจ และถ้าจะนำไปใช้จริง ๆ ก็ย่อมได้ เพราะโครงสร้าง
ของแฟ้ม thaiall.txt มีลักษณะที่ง่าย เอื้อต่อการทำความเข้าใจ
Source code ของ i.pl
#!/usr/local/bin/perl
$g = $ENV{"QUERY_STRING"};
print "Content-type: text/html","\n\n";
print'<html><head><title>ท่านมาใช้บริการ เราขอบใจ .. thaiall.com</title></head>';
$filelink = join '',"/data1/hm/thaiall.com","/link/thaiall.txt";
open(fn, "<$filelink" );
@rf = <fn>;
close(fn);
$size=@rf;
$i = 0;
$webout = "www.thaiall.com/link";
$webname = "ไม่พบเว็บที่ต้องการ";
while ($i < $size) {
   if (substr($rf[$i],0,7) eq  $g) {
      @r = split /:/,$rf[$i];
      $webout = $r[1];
      $webname = $r[2];
      $i = 9999999;
   }
   $i++;
}	
print "<meta http-equiv='Refresh' content='0; URL=http://",$webout,"'>";
print '<body bgcolor=#fffffd><center><font face="ms sans serif" color=#0000ff>';
print 'กรุณารอสักครู่ แต่ยังเงียบอยู่นาน ให้ทำบรรทัดถัดไป<br>Click here : ';
print '<a href=http://',$webout,'>',$webname,'</a>';

work.pl
สำหรับ สืบค้นข้อมูล link เพิ่ม ลบ link ทั้งแบบผู้ใช้ และแบบผู้บริหารหน้าฐานข้อมูล
ประโยชน์และหน้าที่ของ work.pl
โปรแกรมนี้เป็นบริการที่สำคัญมากสำหรับระบบ เพราะจะทำให้ท่านสามารถ สืบค้น เพิ่ม และขอลบเว็บด้วยตัวท่านได้
แต่การเพิ่ม และลบ ถูกแบ่งเป็น 2 ส่วนคือ เพิ่มลบโดยผู้ใช้ หรือเพิ่มลบโดยผู้ดูแลระบบ
การเพิ่ม จะเป็นการเพิ่ม link ใหม่ต่อท้ายแฟ้ม ส่วนการลบ จะเพิ่ม link นั้นต่อท้ายแฟ้ม แต่จะถูก mark ตัวเข้มไว้
เมื่อผู้ดูแลเข้าไปดู สามารถที่จะเพิ่มลบได้จริง โดยใช้เลขประจำเว็บในการบริหารการปรับปรุงข้อมูลนั้น
โดยอาศัยการส่งค่าผ่าน form จาก atop.htm แต่สิ่งที่ระบุว่านี่คือการสั่งงานจากใคร จะตรวจสอบจากรหัสผ่าน
ในที่นี้สมมุติรหัสผ่านเป็น thaiallsure แต่ในความเป็นจริง ไม่ใช่ตัวนี้ ถ้าท่าน copy ไปแล้ว จะสามารถนำไปแก้
เป็นรหัสอะไรก็ได้ที่แปลก ๆ และไม่มีโอกาสเป็นชื่อเว็บของใคร ก็จะทำให้ท่านบริหาร แฟ้ม thaiall.txt ได้
Source code ของ work.pl
#!/usr/local/bin/perl
$b = "/data1/hm/thaiall.com";
$basedir = join '',$b,"/link/thaiall.txt";
# pasword in space of name
# 1110001 in http and linkinthai in name and worktype is del .. ok
# 1110001:1120001 in http and linkinthai in name and worktype is add .. ok
# move 1110001 to be 1120001 and old value will be lost
$pass = "linkinthai";
&parse_form;
print"Content-type:text/html\n\n";
print'<html><head><title>Work for thaiall link</title></head>',"\n";
print'<body bgcolor=#fffffd text=#000000 link=#ff0000 vlink=#ff4444 alink=#ffff00>';
print'<table width=100% cellpadding=0 cellspacing=0 border=0>';
print'<td valign=top><a href=/><img src=/pic/logota.gif border=0 alt=logo></a></td><td>';
print'<font face="ms sans serif" size=0>';
if ($http eq "www.yourcompany.com" or $name eq "ชื่อเว็บอย่างสั้น"  ) {
  print "ท่านป้อนข้อมูลเดิมที่ผมกำหนดให้ ซึ่งไม่สามารถกระทำได้";
  &bottomline;	
  exit;
}
open (fn,"<$basedir");
@gfn = <fn>;
close(fn);
$cntar = @gfn;
@lastrec = split /:/,$gfn[$cntar-1];
$lastid = $lastrec[0];
$lastid++;
if ( $worktype eq "srch" ) {
  print "<font size=2>ผลลัพธ์จากการสืบค้น</font><br><ul>";
  $j = 1;
  for $i (0 .. $cntar-1) {
    $gfn[$i] = lc $gfn[$i];
    if ($gfn[$i] =~ /(.*)$name(.*)/ or $worktype eq "linkinthai") {				
      @g = split /:/,$gfn[$i];
      print "<b>$j</b> - ",$g[0]," : <a href=http://",$g[1]," target=_blank>",$g[2],"</a> ";
      print "<font color=#000080>",$g[1],"</font><br>";
      $j++;
    }
  }
  print "</ul>";
}
# ==========================
if ( $worktype eq "add" and $pass ne $name) {
  unlink "$basedir";
  open (fn,">$basedir");
  for $i (0 .. $cntar-1) {
    print fn $gfn[$i];
  }
  print fn $lastid,":",$http,":",$name,"\n";
  print "เว็บใหม่จะถูกเพิ่ม เมื่อทีมงานได้เข้ามา update และจะจัดเข้ากลุ่มที่เหมาะสมต่อไป";
  close (fn);
} else {
# start else
if ( $worktype eq "add" and $pass eq $name) {
  @mvid = split /:/,$http;
  $mvhaveid = $mvid[0];
  $mvnewid = $mvid[1];
  if ( $mvhaveid > 9999999 or $mvnewid > 9999999 or $mvhaveid < 1000000 or $mvnewid < 1000000 ) {
    print "รหัสเก่า : ", $mvhaveid ,"<br>";
    print "รหัสใหม่ : ", $mvnewid ,"<br>";
    print "รหัสขอย้าย link มีปัญหาคือ ป้อนไว้ ไม่เท่า 7 หลัก";
    &bottomline;	
    exit;
  }
  $yeshave = "no";
  $ok = "no";
  for $i (0 .. $cntar-1)    {
     @mvdat = split /:/,$gfn[$i];
     if ($mvdat[0] eq $mvhaveid) {
       $yeshave = "ok";
       $yesdata = join '',$mvdat[0],':',$mvdat[1],':',$mvdat[2];
     }
   }
   if ($yeshave eq "ok" ) {
     unlink "$basedir";
     open (fn,">$basedir");
     for $i (0 .. $cntar-1)    {
       @mvdat = split /:/,$gfn[$i];
       if (($mvdat[0] eq $mvnewid and $ok ne "ok") or ($mvdat[0] > $mvnewid and $ok ne "ok")) {
         @yesrec = split /:/,$yesdata;
         print fn  $mvnewid,":",$yesrec[1],":",$yesrec[2];
         $ok = "ok";
         print "ย้ายรหัสข้อมูลเก่าลงไปเรียบร้อย ด้วยดี";
       }
       if ($mvdat[0] ne $mvhaveid and $mvdat[0] ne $mvnewid ) {
         print fn $gfn[$i];
       } 			
     } # for      	
     if ($mvdat[0] < $mvnewid and $ok eq "no") {	
       @yesrec = split /:/,$yesdata;
       print fn  $mvnewid,":",$yesrec[1],":",$yesrec[2];
       $ok = "ok";
       print "ย้ายรหัสข้อมูลเก่าลงไปเรียบร้อย ด้วยดี";	
	 }
     if ($ok eq "no") { print "การย้ายข้อมูลไม่สำเร็จ"; }
       close (fn);
     } else {
       print "ไม่พบรหัสที่ต้องการให้ย้ายไป จึงย้ายไม่สำเร็จ";
     }
   }
# end else
}
# ==========================
if ( $worktype eq "del" ) {
  unlink "$basedir";
  open (fn,">$basedir");
  for $i (0 .. $cntar-1)    {
    @g = split /:/,$gfn[$i];
    if ($pass ne $name or $http ne $g[0]) {
      print fn $gfn[$i];
    }
  }
  if ($pass eq $name) {
    print "เลขที่ต้องการลบ จัดการเรียบร้อย";
  } else {
    print fn $lastid,":",$http,":<b>",$name,"</b>\n";
    print "เว็บที่ขอลบ จะถูกบันทึกเป็นตัวเข้ม ใน frame ด้านขวา .. และผมขอตรวจสอบก่อน";
  }
  close (fn);
}
&bottomline;
sub bottomline {
  print '<!--#exec cgi="/cgi/sponsor.pl"--><!--#exec cgi="/cgi/bottom.pl"--></td></table>';
  exit;
}
sub parse_form {
  if ($ENV{'REQUEST_METHOD'} eq 'GET') {
    @pairs = split(/&/, $ENV{'QUERY_STRING'});
  } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    @pairs = split(/&/, $buffer);
  }
  foreach $pair (@pairs) {
    local($name, $value) = split(/=/, $pair);
    $name =~ tr/+/ /;
    $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/<!--(.|\n)*-->//g;
    $config{$name} = $value;
  }
  $worktype = lc $config{'chk'};
  $http =  lc $config{'http'};
  $name =  lc $config{'name'};
  if (substr($http,0,7) eq "http://") { $http = lc substr($http,7,length($http)-7); }
}

แบบฝึกหัด
    ให้ทำตามโจทย์ต่อไปนี้
  1. ให้นำ link ไปใช้ในแบบที่หนึ่ง
  2. ให้นำ link ไปใช้ในแบบที่สอง
  3. ให้นำ link ไปใช้ในแบบที่สาม
  4. ให้เขียนโปรแกรมตามตัวอย่างข้างบนนี้ ให้ได้ทุกโปรแกรม และนำไปใช้จริง โดยปรับสีสันให้สวยงาม
  5. ให้ปรับรูปแบบ โครงสร้าง หรืออื่น ๆ ตามความเหมาะสม เพราะที่ผมทำไม่ใช่สิ่งที่ดีที่สุด ย่อมมีจุดที่จะทำให้ดีขึ้นได้