thaiall logomy background
การเขียนโปรแกรมภาษา PERL สำหรับ Dynamic website
my town
ภาษาเพิร์ล
PERL
าษาเพิร์ล (PERL) คือ ภาษาโปรแกรมที่ทำงานบนเครื่องบริการเว็บ (Web Server) เป็นภาษาสคริปต์ทำงานฝั่งเครื่องบริการ (Server-Side Script) พัฒนาโดย Larry Wall ในปี ค.ศ. 1987 โดยมีรากฐานภาษามาจากภาษาซี เพื่อใช้งานบนระบบปฏิบัติการยูนิกซ์ คำว่า PERL ย่อมาจาก Practical Extraction and Report Language
รวมบทเรียน
  1. ข้อควรทราบก่อนลงมือเขียน จำเป็นที่ผู้เริ่มต้นควรศึกษา
  2. เริ่มเขียนโปรแกรมพื้นฐาน รวมโปรแกรมง่าย ๆ เพื่อให้ท่านคุ้นเคยก่อน
  3. การรับค่าผ่าน URL เพื่อให้ท่านศึกษาวิธีการส่งค่า แบบแรก
  4. การรับค่าผ่าน FORM เพื่อให้ท่านศึกษาวิธีการส่งค่าใน แบบที่สอง
  5. การนำค่าจาก FORM เก็บลงแฟ้ม แสดงการประมวลผลกับแฟ้มแบบ txt
  6. การปรับปรุงแฟ้มด้วยเลขบรรทัด แสดงการประมวลผลที่สมบูรณ์ยิ่งขึ้น
  7. การเขียน chat board อย่างง่าย แสดงการ apply นำความรู้เบื้องต้นมาใช้อย่างง่าย ๆ
  8. การเขียน opinion board แสดงการเขียน webboard รับข้อมูลจากผู้ต้องการแสดงความเห็น
  9. การเขียน counter อย่างง่ายด้วยตัวอักษร แสดงการประมวลผลในหน้าเว็บ ทดลองได้เฉพาะ hypermart.net
  10. การเขียน counter อย่างง่ายด้วยภาพ แสดงการประมวลผลในหน้าเว็บแต่เป็นการเพิ่ม tag ที่ซับซ้อนขึ้น
  11. การเขียน Option เรียกเว็บมารวมกัน การเลือกข้อมูลมาแสดง โดย access มาจากแฟ้มแบบ txt ที่จัดระเบียบไว้
  12. การส่งค่าผ่าน Mail ด้วย Form ใช้ทำฟอร์ม ซื้อขาย หรือรับสมาชิก ได้ครับ (ถ้ามีปัญหา mail หาผมนะ)
  13. การทำ Shopping mall ด้วยระบบตะกร้า หยิบลงตะกร้า คำนวณเงิน และส่งรายการผ่าน mail
  14. การทำ Shopping cart ใช้ cookie หยิบลงตะกร้า คำนวณเงิน และส่งรายการผ่าน mail
  15. การทำ Demo e-commerce ช่วยให้ท่านเปิดร้านขายของได้ สมบูรณ์ในระดับหนึ่ง
  16. การเขียน Search engine อย่างง่าย พร้อม ฐานข้อมูลให้ download จะได้มี yahoo thailand เยอะ ๆ ไง
  17. การเขียน graph ในรูปแบบ GIF เป็นพื้นฐานให้ท่านนำไปเขียน counter, banner exchange หรือ online gif animation
  18. การทำชุดรวมlink+copyไปใช้ 3 วิธี แสดง source code และตัวอย่าง
  19. การทำชุดทดสอบ online แบบสุ่ม
  20. ทดสอบ และแก้ไข upload.pl # ทำให้ใช้แบบไม่มี user และ password
  21. Download Perl script
  22. การทำให้ Windows เป็น Web server และบริการ PERL
รวมบทเรียน
PERL from book
0101.intro/if.pl
0102.intro/loop.pl
0103.intro/sub.pl
0201.shellcontrol/useshell.pl
0202.shellcontrol/whereis.pl
0203.shellcontrol/finger.pl
0204.shellcontrol/gethost.htm
0205.shellcontrol/gethostbyaddr.pl
0206.shellcontrol/gethostbyname.pl
0207.shellcontrol/listfilein.pl
0208.shellcontrol/english.pl
0209.shellcontrol/showenv.pl
0302.basicupdate/index.html
0303.basicupdate/recfirst.pl
0304.basicupdate/recadd.pl
0305.basicupdate/reclst.pl
0306.basicupdate/recdel.pl
0307.basicupdate/recchange.pl
0308.basicupdate/filedel.pl
0402.keywordupdate/index.html
0403.keywordupdate/recfirst.pl
0404.keywordupdate/recadd.pl
0405.keywordupdate/reclst.pl
0406.keywordupdate/recdel.pl
0407.keywordupdate/recchange.pl
0408.keywordupdate/recsort.pl
0502.quiz/quizjava.pl
0503.quiz/quizauto.pl
0504.quiz/parse.pl
0601.gallery/gallery.pl
0602.gallery/pic.htm
0603.gallery/pic.pl
0705.regist/index.html
0706.regist/evalsubj.pl
0707.regist/evalopt.pl
0708.regist/evalsave.pl
0709.regist/grade.pl
0710.regist/listunlink.pl
0711.regist/registnew.htm
0712.regist/registnew.pl
0713.regist/parse.pl
0803.board/index.html
0804.board/boardadd.pl
0805.board/boardlist.pl
0806.board/boardsearch.pl
0807.board/boardread.pl
0808.board/boardreply.pl
0809.board/boarddel.pl
0810.board/parse.pl
0903.counter/counter.htm
0904.counter/counter.pl
0905.counter/counterg.pl
0906.counter/tracker.pl
0907.counter/trackershow.pl
1001.cart/cartprocess.htm
1002.cart/cartprocess.pl
1101.beginat/cooksave.pl
1102.beginat/cookcall.pl
1103.beginat/index.html
1104.beginat/menu.pl
1105.beginat/setdefault.pl
1106.beginat/begin.pl
1201.graphic/xbitmap.pl
1202.graphic/18.pl
1203.graphic/9to0.pl
1204.graphic/circleline.pl
การเขียนโปรแกรมสำหรับ WAP Browser ด้วยภาษา Perl
#!/usr/bin/perl
&parse;
print "Content-type:text/vnd.wap.wml\n\n";
print "<?xml version=\"1.0\"?>\n";
print "<wml><card id=HTML title=Grade_Report>";
print "<pre>Get ID = ";
print $config{'id'};
print "</pre></card></wml>";
exit;
sub parse {
  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;
    $name =~ s/~!/~!/g; 
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/~!/~!/g; 
    $value =~ s/<!--(.|\n)*-->//g;        
    $config{$name} = $value;
  }
}
ต.ย. Hello world
#!/usr/bin/perl
print "Content-type: text/htmlnn";
print "Hello, World...n";
foreach $key (keys(%ENV)) {
  print "$key = $ENV{$key}n";
}

Hello, World...
SERVER_SOFTWARE = OmniHTTPd/2.10
winbootdir = C:WINDOWS
DOCUMENT_ROOT = C:HTTPDHTDOCS
GATEWAY_INTERFACE = CGI/1.1
PROMPT = $p$g
CLASSPATH = C:EasyPhotoPhotoDeluxe 2.0AdobeConnectables
REMOTE_ADDR = 127.0.0.1
SERVER_PROTOCOL = HTTP/1.1
REMOTE_HOST =
REQUEST_METHOD = GET
HTTP_REFERER =
REMOTE_USER =
COMSPEC = C:WINDOWSCOMMAND.COM
HTTP_USER_AGENT = Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)
QUERY_STRING =
PATH = C:httpd;C:WINDOWS;C:WINDOWSCOMMAND;C:HTTPDPHP
windir = C:WINDOWS
HTTP_ACCEPT = */*
TMP = C:WINDOWSTEMP
HTTP_ACCEPT_LANGUAGE = th
AUTH_TYPE =
SCRIPT_NAME = /test.pl
TEMP = C:WINDOWSTEMP
SERVER_NAME = localhost
PATH_INFO = /test.pl
HTTP_COOKIE =
SERVER_PORT = 80
CONTENT_LENGTH = 0
CONTENT_TYPE =
PATH_TRANSLATED = C:HTTPDHTDOCStest.pl
REMOTE_IDENT =
ต.ย. สวัสดี Perl 5.8.8
Perl Version
This is perl, v5.8.8 built for i686-linux
Copyright 1987-2006, Larry Wall

<STDIN>
$ENV{"QUERY_STRING"}

การเรียกใช้ SSI
New : <!--#include virtual="/cgi/bottomx.pl"-->
Old : <!--#exec cgi="/cgi/bottomx.pl"-->

#!/usr/local/bin/perl
use warnings; 
use Encode qw(decode encode);
$d = "สวัสดี";
$d = decode("iso-8859-11",$d); 
print "Content-type:text/html\n\n";   
print $d;
ต.ย. แก้โค้ด wide-character ที่พบใน error log
#!/usr/local/bin/perl 
# https://perldoc.perl.org/perlunifaq#What-is-a-%22wide-character%22?
use Encode qw(decode encode);
binmode STDOUT, ":encoding(UTF-8)"; # 1
my $b = $ENV{DOCUMENT_ROOT}; #2
my $basedir = join '',$b,"/quiz/";
my $fname = "quiz.dat";
open my $fn, '<', "$basedir$fname";
  my @bfn = <$fn>;
close $fn;
print "Content-type:text/html\n\n"; 
print decode("utf8",'<html><head><title>สวัสดี</title>'); #3
print '<meta charset="utf-8" /></head><body>';
print decode("utf8","กขค");
for $r (0 .. 5) { 
  print decode("iso-8859-11",$bfn[$r]); #4 			
}
ต.ย. รับข้อมูล
print "Content-type: text/plain\n\n";
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) {
  @v = split("=",$pair);
  $var[$v[0]] = $v[1];
}
print  $var["abc"],"<hr>";
print "<I><br><a href='?abc=123'>abc=123</a><br></I>";
/perl/plsndfm.htm
ต.ย. สั่งให้ shell ทำงาน
#!c:perlbinperl.exe
# alt-96 for `
print"Content-type:text/html\n\n";
$lct = localtime(time);
print $lct;
print "<pre><font face=fixedsys>";
$cmd =`type c:\autoexec.bat`; &printout;
$cmd =`echo dir %WINDIR% > b.bat`; &printout;
$cmd =`type b.bat`; &printout;
$cmd =`b.bat`; &printout;
$cmd =`dir`; &printout;
#
sub printout {
  @rec = split( "n", $cmd);
  foreach $r ( @rec) { print "$r n"; }
  print "<hr>";
}
ต.ย. ปัดทศนิยมตำแหน่งที่ 3 ด้วย function
#!c:/thaiabc/php/perl.exe
# http://www.infocopter.com/perl_corner/round5.htm
# http://www.perl.com/doc/FAQs/FAQ/oldfaq-html/Q4.13.html
# Question from  ธนากร ติยะวิสุทธิ์ศรี
# 3.844999905   =   3.84
# 3.849999905   =   3.85
print "Content-type: text/plainnn";
print &round_amount(3.844999905) , "n";
print &round_amount(3.849999905) , "n";
sub round_amount {
  my $var = shift;
  $var = $var;
  # $frac   = sprintf("%.2f", $var - int($var));
  $frac   = sprintf("%.2f", $var);
  return $frac;
}
ต.ย. รับจากทั้ง get และ post
#!/usr/local/bin/perl
# https://www.tutorialspoint.com/using-post-methods-in-perl
local ($buffer, @pairs, $pair, $name, $value, %FORM);
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
   $buffer = $ENV{'QUERY_STRING'};
}
# Split information into name/value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}
$first_name = $FORM{first_name};
$last_name = $FORM{last_name};
print "Content-type:text/html\r\n\r\n";
print "<body>";
print "<form method=post action=?><input name=first_name><input name=last_name><input type=submit></form>";
print "</body>";
Web guides Perl
scriptarchive.com
CGI Programming 101
Apache Week
RSS of Perl
metacpan.org / pod
Perl index
  1. !~
  2. $!
  3. $""
  4. $#
  5. $$
  6. $%
  7. $&
  8. $>
  9. $<
  10. $<digit>
  11. $'
  12. $(
  13. $)
  14. $*
  15. $+
  16. $,
  17. $-
  18. $.
  19. $/
  20. $0
  21. $:
  22. $;
  23. $=
  24. $?
  25. $@
  26. $ARGV
  27. $ENV{expr}
  28. $SIG{expr}
  29. $[
  30. $
  31. $`
  32. $]
  33. $^
  34. $^D
  35. $^F
  36. $^I
  37. $^L
  38. $^P
  39. $^T
  40. $^W
  41. $^X
  42. $_
  43. $|
  44. $~
  45. %INC
  46. <=>
  47. <CR>
  48. ()
  49. (TYPE)
  50. **
  51. **=
  52. -x
  53. ..
  54. .=
  55. /pattern/
  56. =~
  57. ?PATTERN?
  58. ?pattern?
  59. @ARGV
  60. @inc
  61. A
  62. D
  63. H
  64. HOME
  65. L
  66. LOGDIR
  67. PATH
  68. PERLDB
  69. PERLLIB
  70. S
  71. T
  72. V
  73. a
  74. accept
  75. alarm
  76. atan
  77. b
  78. bind
  79. binmode
  80. c
  81. caller
  82. chdir
  83. chmod
  84. chop
  85. chown
  86. chroot
  87. close
  88. closedir
  89. cmp
  90. command
  91. connect
  92. continue
  93. cos
  94. crypt
  95. d
  96. dbmclose
  97. dbmopen
  98. defined
  99. delete
  100. die
  101. do
  102. dump
  103. each
  104. endhostent
  105. endprotoent
  106. endpwent
  107. eof
  108. eq
  109. eval
  110. exec
  111. exit
  112. exp
  113. f
  114. fcntl
  115. fileno
  116. flock
  117. for
  118. foreach
  119. fork
  120. ge
  121. getc
  122. getgrgid
  123. gethostbyaddr
  124. gethostbyname
  125. gethostent
  126. getlogin
  127. getpeername
  128. getpgrp
  129. getppid
  130. getpriority
  131. getprotobyname
  132. getprotobynumber
  133. getprotoent
  134. getpwent
  135. getpwnam
  136. getsockname
  137. getsockopt
  138. gmtime
  139. goto
  140. grep
  141. gt
  142. h
  143. hex
  144. if
  145. index
  146. int
  147. ioctl
  148. join
  149. keys
  150. kill
  151. l
  152. last
  153. le
  154. length
  155. link
  156. listen
  157. local
  158. localtime
  159. log
  160. lstat
  161. lt
  162. m
  163. mkdir
  164. msgctl
  165. msgget
  166. msgrcv
  167. msgsnd
  168. n
  169. ne
  170. next
  171. oct
  172. open
  173. opendir
  174. ord
  175. p
  176. pack
  177. pipe
  178. pop
  179. print
  180. printf
  181. push
  182. q
  183. qx
  184. rand
  185. read
  186. readdir
  187. readlink
  188. recv
  189. redo
  190. rename
  191. require
  192. reset
  193. return
  194. reverse
  195. rewinddir
  196. rindex
  197. rmdir
  198. s
  199. s
  200. scalar
  201. seek
  202. seekdir
  203. select
  204. select
  205. semctl
  206. semget
  207. semop
  208. send
  209. sethostent
  210. setpgrp
  211. setpriority
  212. setprotoent
  213. setpwent
  214. setsockopt
  215. shift
  216. shmctl
  217. shmget
  218. shmread
  219. shutdown
  220. sin
  221. sleep
  222. socket
  223. socketpair
  224. sort
  225. splice
  226. split
  227. sprintf
  228. sqrt
  229. srand
  230. stat
  231. study
  232. substr
  233. symlink
  234. syscall
  235. sysread
  236. system
  237. syswrite
  238. t
  239. tell
  240. telldir
  241. time
  242. times
  243. tr
  244. truncate
  245. umask
  246. unary
  247. undef
  248. unlink
  249. unpack
  250. unshift
  251. utime
  252. values
  253. vec
  254. w
  255. wait
  256. waitpid
  257. wantarray
  258. warn
  259. while
  260. write
  261. x
rspsocial
Thaiall.com