เทคนิกการเขียน Perl
>  Home   HTML   CSS   JavaScript   PHP   Perl   Photoshop   TCP/IP 

บทที่ 2 เรื่องของตัวแปร

ชนิดของตัวแปล

          ก่อนที่จะเริ่มเขียนโปรแกรมเราก็ควรที่จะรู้จักกับชนิดของตัวแปลและโครงสร้างข้อมูลพื้นฐานเสียก่อน
ตัวแปลในภาษาPerlก็จะมี
  1. ตัวเลข
    • ตัวเลขทศนิยม เช่น 1.25, 7.25e45, -12e23 เป็นต้น
    • เลขจำนวนเต็ม เช่น 15, -99 หรืออาจจะถูกเขียนอยู่ในรูปเลขฐาน 8, ฐาน 16 ก็ได้ เช่น
          0377 # ขึ้นต้นด้วย 0 เป็นเลขฐาน 8 มีค่าเท่ากับ 255 ฐาน 10
          0xff # ขึ้นต้นด้วย 0x เป็นเลขฐาน 16 มีค่าเท่ากับ 255 ฐาน 10
  2. String
    • String ที่อยู่ภายใต้เครืองหมาย Single-quoted ( ' ) ข้อความที่อยู่ข้างในจะถือเป็นแค่ตัวอักษรไม่มีความหมาย
    • String ที่อยู่ภายใต้เครืองหมาย Double-quoted ( " ) string ที่อยู่ภายใต้เครื่องหมายนี้ อาจเป็นตัวแปลหรืออักษรพิเศษในภาษา C ก็ได้

เพื่อให้เข้าใจนี้จะเป็นการแสดงตัวอย่าง

#!/usr/bin/perl $name = "BIG"; print "Content-type:text/html\n\n"; print "<pre>\n"; print 'Hello\n'; print "Hello\n"; print '\nMY NAME IS $name\n'; print "\nMY NAME IS $name\n"; print 'hello there'; print "\ncoke\tsprite"; print "</pre>\n";
ตารางแสดง Double-quoted String Backslash Escape
รูปแบบการเขียนความหมาย
\nNewline
\rReturn
\tTab
\bBackspace
\vVertical Tab
\aBell
\eEscape
\007เลขฐาน8ใดๆ (007=bell)
\x7fเลขฐาน16ใดๆ (7f=delete)
\cCCrtl+อักษรใดๆ (\cC = Ctrl+C)
\\Backslash
\"Double quote
\lอักษรตัวต่อไปเป็นตัวเล็ก
\Lเป็นอักษรเล็กจนถึง \E
\uอักษรตัวต่อไปเป็นตัวใหญ่
\Uเป็นอักษรเล็กจนถึง \E
\Eจบ \Lหรือ \U

          โครงสร้างข้อมูลในภาษา Perl มีอยู่ 3 ชนิด คือ

  1. Scalar Variable
  2. Arrays and List
  3. Associative Arrays

Scalar Variable

          scalar เป็นชนิดข้อมูลพื้นฐานของภาษา Perl ซึ่งจะเป็น ตัวเลขหรือ string ก็ได้ตัวแปรชนิดนี้จะขึ้นต้นด้วย เครื่องหมาย dollar-sign ($) แล้วตามด้วยตัวอักษร 1 ตัว และที่ตามหลังที่เหลือจะเป็น ตัวอักษร, ตัวเลข หรือ ขีดล่าง (_) ก็ได้ ซึ่งอักษรตัวเล็ก, ตัวใหญ่จะถือว่าต่างกันตัวอย่างชื่อตัวแปรที่ถูกต้อง
$abc
$ABC
$test_1234

ฟังค์ชัน chop( )

          ฟังค์ชันนี้เป็นฟังค์ชันที่ใช้ในการตัดตัวอักษรตัวสุดท้ายออกจากตัวแปลตัวนั้น เช่น

$x = "hello world";
chop($x); # $x ตอนนี้มีค่าเท่ากับ "hello worl"
สำหรับตัวแปรที่ถูกเรียกใช้โดยที่ยังไม่ได้มีการกำหนดค่าให้ตัวแปรนั้นจะมีค่าเป็น undef

Arrays and List

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

ตัวอย่างการใช้ Array

@abc = (1,2,3); #ตัวแปร abc มีข้อมูล 3 ตัวคือ 1, 2, 3
@def = (5.5..10.5); #มีค่าเท่ากับ (5.5, 6.5, 7.5, 8.5, 9.5, 10.5)
@xyz = ("aaa",10.5,'b'); #ข้อมูลใน Array ไม่จำเป็นต้องเป็นชนิดเดียวกัน สามารถเป็น ตัวเลขและ String ผสมกันได้
@mix = (@abc, @xyz); #คือการนำArray abc มาต่อกับ xyz { @mix มีค่าเท่ากับ (1, 2, 3, "aaa", 10.5, 'b') }
($a, $b, $c) = (1, 2, 3); #กำหนดค่า $a = 1, $b = 2, $c = 3
($a, $b) = ($b, $a); #สลับค่าตัวแปร $a กับ $b
($d, @abc) = ($a, $b, $c); #กำหนดค่า $d = $a, @abc= ($b, $c)
$a = @abc; # กำหนดค่า $a ให้เท่ากับความยาวของ Array @abc
($a) = @abc; #กำหนดค่า $a ให้เท่ากับข้อมูลตัวแรกของ @abc

การเข้าถึงข้อมูลใน Array

          เราสามารถเข้าถึงข้อมูลใน Array โดยใช้ index ซี่งเป็นตัวเลขจำนวนเต็มเริ่มต้นที่ศูนย์ในการระบุต่ำแหน่งของข้อมูล เช่นถ้าต้องการข้อมูลตัวแรกของ @abc สามารถเขียนได้เป็น $abc[0]

Note เครื่องหมาย @ ต้องถูกเปลี่ยนเป็น $

เพื่อความเข้าใจทั้งหมดที่สอนไปก็ควรที่จะลองเขียนดูนะครับ
#!/usr/bin/perl print "Content-type:text/html\n\n"; print "<pre>\n"; @abc = (0,'Hello',"yes"); print '@abc = '."($abc[0], $abc[1], $abc[2])\n"; $abc[0]++; #เพิ่มค่าในตัวแปลแรกของ @abc print '@abc = '."($abc[0], $abc[1], $abc[2])\n"; @abc[0,1] = @abc[1,0]; #สลับค่าระหว่างตัวแปรที่ 0, 1 print '@abc = '."($abc[0], $abc[1], $abc[2])\n"; @def = ('R','E','A','L','D','E','F','.','N','E','T')[1,2,10]; print "('R','E','A','L','D','E','F','.','N','E','T')[1,2,10] = ($def[0], $def[1], $def[2])\n"; $def[5] = "end"; for ($i=0; $i<@def; $i++) { print '$def'."[$i] = $def[$i] \n"; } print "</pre>\n";
ข้อสังเกตุ ในตัวแปรที่เรายังไม่ได้มีการกำหนดค่าให้มันจะถือเป็น undef

ฟังค์ชันที่ใช้กับตัวแปล array

push(@array_variable, value), unshift(@array_variable, value)
     เป็นฟังค์ชันที่ใช้เพิ่มค่าลงไปในตัวแปล array
pop(@array_variable, value), shift(@array_variable, value)
     เป็นฟังค์ชันที่ดึงค่าออกจาก array 1 ตัวถ้าตัวแปรนั้นเป็นตัวแปรว่างก็จะ คืนค่า undef กลับมา
reverse(@array)
     เป็นฟังค์ชันที่ใช้กลับค่าในตัวแปล
sort(@array)
     เป็นฟังค์ชันที่ใช้เรียงค่า ฟังค์ชันนี้ใช้กับตัวแปลStringเท่านั้น


ตัวอย่าง #!/usr/bin/perl print "Content-type:text/html\n\n"; print "<pre>\n"; @array_variable = ("hello,","world!"); push(@array_variable,"#(ใช้ฟังค์ชัน push)"); print "@array_variable\n"; pop(@array_variable); print "@array_variable\n"; unshift(@array_variable,"#(ใช้ฟังค์ชัน unshift)"); print "@array_variable\n"; shift(@array_variable); print "@array_variable\n"; @a = (1,2,3,4,5); print 'now @a = '."@a\n"; @a = reverse(@a); print 'After reverse : @a = '."@a\n"; @a = reverse(1,2,3,4,5); print "After reverse(1,2,3,4,5) = @a\n"; @a=sort(1,2,4,8,16,32,64); print "sort(1,2,4,8,16,32,64) = @a\n"; @a = ("c","a","d","b"); @b = sort(@a); print 'sort("c","a","d","b")'." = @b\n"; @a = ("hello,","world!"); print "ก่อนใช้ฟังค์ชัน chop : @a\n"; chop(@a); print "หลังใช้ฟังค์ชัน chop : @a\n "; print "</pre>\n";

Associative Array

          Associative Array เป็นสิ่งที่คล้ายๆกับ array ตรงที่ใช้เก็บ scalar data จำนวนหนึ่งแตจะต่างกันตรงที่การเข้าถึงข้อมูลแต่ละตัวจากที่เคยใช้ index เป็น เลขจำนวนเต็ม ก็จะเปลี่ยนเป็นใช้ Key ซึ่ง Key จะเป็นตัวเลขหรือ String ก็ได้

การสร้าง Associative Array

          ตัวแปล Associative Array จะขึ้นต้นด้วยเครื่องหมาย percent sign (%) เราสามารถกำหนดค่าให้ตัวแปรชนินนี้แบบ Array หรือ ค่อยๆเพิ่มข้อมูลไปทีละตัวก็ได้เช่น
%abc = ("aaa","bbb",234,456.7);
มีค่าเท่ากับ
$abc{"aaa"} = "bbb";
$abc{234} = 456.7;


ฟังค์ชันที่ใช้กับตัวแปล Associative Array

keys(%ass_array)
     เป็นฟังค์ชันที่จะคืนค่าที่ใช้เป็นarray ของ Key ของตัวแปล Associative Array
values(%ass_array)
     เป็นฟังค์ชันที่จะคืนค่าที่ใช้เป็นarray ของ values ของตัวแปล Associative Array
delete
     เป็นฟังค์ชันที่ลบข้อมูลออกจากตัวแปรนั้นๆ each(%ass_array)
     เป็นฟังค์ชันที่จะคืนค่า key-value ออกมาเป็นคู่ๆ ฟังค์ชันนี้มักใช้ร่วมกับ while เพื่อใช้อ่านข้อมูลมาทีละคู่

ตัวอย่าง #!/usr/bin/perl print "Content-type:text/html\n\n"; print "<pre>\n"; %abc = ("aaa","bbb",234,456.7); $abc{"secret"} = "my password"; print "แสดงข้อมูลในตัวแปร %abc\n"; foreach $key (keys %abc) { print '$abc'."{$key} == $abc{$key}\n"; } print "\nทดสอบการใช้ ฟังค์ชัน keys, valus\n"; @a = keys(%abc); @b = values(%abc); print "keys(%abc) = @a\n"; print "values(%abc) = @b\n"; print "\nการแสดงข้อมูลด้วยคำสั่ง each \n"; while (($key,$value) = each(%abc)) { print '$abc'."{$key} == $value\n"; } print "\nหลังการใช้ delete \n"; delete $abc{"secret"}; while (($key,$value) = each(%abc)) { print '$abc'."{$key} == $value\n"; } print "</pre>\n";

Back to top | Next Charpter >>





© copyright 2001 Sorrawut Korsuwansiri