บทเรียนภาษา Perl

 

บทที่ 9 : การทำงานแบบวนรอบ และเงื่อนไขการทำงาน แบบวนรอบ

 

ในบทนี้จะกล่าวถึงการทำงาน แบบวนรอบและ โครงสร้างการควบคุมการวนรอบ ภาษา Perl สนับสนุนการทำงาน โดยใช้โครงสร้างการควบคุม การทำงานแบบวนรอบ มีการวนรอบรูปแบบต่างๆ ให้เลือกใช้ตามความเหมาะสม ของงานมากมาย โครงสร้างของการวนรอบ ในภาษา Perl ไม่ยุ่งยากมากนัก และมีลักษณะ คล้ายกับในภาษา C และ Pascal ค่อนข้างมาก โดยจะมีชุดคำสั่ง สำหรับทำการวนรอบ อยู่สองลักษณะคือ

 

  • while, until วนรอบทำงาน จนกว่าจะเป็นไปตามเงื่อนไข
  • for, foreach กำหนดเงื่อนไข และจำนวนครั้งของการวนรอบ

while และ until มีรูปแบบการใช้งาน ดังต่อไปนี้

  • while loop
    • while (Expression) { Block }
    • จะตรวจสอบเงื่อนไข (expression) ก่อนถ้าหากว่าเงื่อนไขเป็น จริง ก็จะกระทำชุดคำสั่งใน { Block } และกลับมา ตรวจสอบเงื่อนไขอีกครั้ง ทำอย่างนี้ไปเรื่อยๆ จนกว่าเงื่อนไขจะเป็น เท็จ จึงจะจบรอบการทำงาน
  • until loop
    • until (Expression) { Block }
    • จะตรวจสอบเงื่อนไข (expression) ก่อนถ้าหากว่าเงื่อนไขเป็น เท็จ ก็จะกระทำชุดคำสั่งใน { Block } และกลับมา ตรวจสอบเงื่อนไขอีกครั้ง ทำอย่างนี้ไปเรื่อยๆ จนกว่าเงื่อนไขจะเป็น จริง จึงจะจบรอบการทำงาน
  • do/until loop
    • do { Block } until (Expression)
    • จะกระทำชุดคำสั่งใน { Block } ก่อน หลังจากนั้นจึงจะมาทำ การตรวจสอบเงื่อนไข (expression) ถ้าหากว่าเงื่อนไขเป็น จริง ก็จะจบการวนรอบ หากว่าเงื่อนไขยังเป็น เท็จ อยู่ก็จะวนกลับ ไปทำงานใน { Block } อีกครั้งและ มาทำการตรวจสอบเงื่อนไขอีก ทำอย่างนี้ไปเรื่อยๆ จนกว่าเงื่อนไขจะเป็น จริง
  • do/while loop
    • do { Block } while (Expression)
    • จะกระทำชุดคำสั่งใน { Block } ก่อน หลังจากนั้นจึงจะมาทำ การตรวจสอบเงื่อนไข (expression) ถ้าหากว่าเงื่อนไขเป็น เท็จ ก็จะจบการวนรอบ หากว่าเงื่อนไขยังเป็น จริง อยู่ก็จะวนกลับไปทำงานใน { Block } อีกครั้งและ มาทำการตรวจสอบเงื่อนไขอีก ทำอย่างนี้ไปเรื่อยๆ จนกว่าเงื่อนไขจะเป็น เท็จ

 

ตัวอย่างของโปรแกรม ที่ใช้การวนรอบ ตัวอย่างโปรแกรมต่อไปนี้ จะรับข้อมูล input จาก keyboard และจะไม่ทำงานต่อจนกว่า password ที่ได้รับจะถูกต้อง

#!/usr/local/bin/perl
print "Password : ";      # Ask for input
$a = ;      # Get input
chop $a;      # Remove the newline at end
while ($a ne "mysecretpassword")      # While input is wrong..
{
      print "sorry wrong passwd. Try agin : ";      # Ask again
      $a = ;      # Get input again
      chop $a;      # Chop off newline again
}

 

จากตัวอย่างข้างต้นชุดคำสั่ง ระหว่างเครื่องหมาย { และ } จะถูกกระทำ ในขณะที่ข้อมูลที่ได้รับ ไม่ตรงกับ password จากตัวอย่างข้างต้น สำหรับชุดคำสั่งวนรอบ while ไม่น่าจะเข้าใจยากนัก มีอีกจุดที่น่าสังเกต คือเมื่อมีการป้อน password ตัวแปร $a จะมีข้อมูลและข้อมูลนั้น ก็จะมีสัญญลักษณ์ขึ้นบรรทัดใหม่ (new line) ต่อท้ายมาด้วย function chop จะนำตัวอักขระตัวท้ายสุดออกจาก string ซึ่งในที่นี้ก็คือ สัญลักษณ์ขึ้นบรรทัดใหม่ นั่นเอง

จากโปรแกรมตัวอย่างข้างต้น สามารถเขียนขึ้นใหม่ โดยใช้รูปแบบของ do .. while ได้ดังต่อไปนี้

#!/usr/local/bin/perl
do
{
      "Password : ";      # Ask for input
      $a = ;      # Get input
      chop $a;      # Chop off newline
}
while ($a ne "mysecretpassword") # Redo while wrong password

for และ foreach มีรูปแบบ การใช้งานดังต่อไปนี้

 

  • for loop
    • for (Expression1; Expression2; Expression3) { Block }
      • Expression1 เป็นค่าเริ่มต้น ของการวนรอบ
      • Expression2 ใช้สำหรับตรวจสอบ ว่าจะวนรอบต่อ หรือว่าหยุดการวนรอบ
      • Expression3 ใช้สำหรับปรับปรุง (update) ตัวแปรที่ใช้ตรวจสอบการวนรอบ
    • อันดับแรกจะเริ่มกระทำ Expression1 ก่อน เพื่อกำหนดค่าเริ่มต้น ของการวนรอบ
    • หลังจากนั้นจะตรวจสอบ Expression2 หากว่าเงื่อนไข เป็นจริงจะกระทำชุดคำสั่งใน { Block }
    • เมื่อเสร็จสิ้นการทำงานชุดคำสั่งใน { Block } แล้วก็จะมากระทำ Expression3
    • หลังจากนั้นจะ วนไปขั้นตอนตรวจสอบ Expression2 อีกครั้ง ทำอย่างนี้ไปจนกระทั่ง Expression2 เป็นเท็จ
  • foreach loop
    • foreach VARIABLE (ARRAY) { Block }
      • ARRAY เป็นตัวกำหนดการวนรอบ ว่าจะวนกี่รอบขึ้นอยู่กับ จำนวนข้อมูลในตัวแปร Array
      • VARIABLE เป็นตัวแปร ที่จะรับข้อมูลจาก ARRAY ตัวปัจจุบันที่ดัชนี ตรงกับรอบที่วนทำงานอยู่
      • ถ้าหากว่าไม่กำหนด VARIABLE จะถือว่าเป็นการเรียกใช้ตัวแปร $_

 

ต่อไปนี้คือตัวอย่าง สำหรับการวนรอบ เพื่อแสดงตัวเลข 0 ถึง 9 โดยใช้ loop แบบ for

for ($i = 0; $i < 10; ++$i)
{
      print "$i\n";
}

 

การวนรอบเพื่อทำงาน ตามชุดข้อมูลใน Array หรือข้อมูลโครงสร้างแบบ list อื่นๆ (เช่น ตามแต่ละบรรทัด ของแฟ้มข้อมูล) ในภาษา Perl ใช้คำสั่งวนรอบแบบ foreach ดังตัวอย่างต่อไปนี้

foreach $book (@title)
{
      print "$book\n"; # Print the item
}

 

ในการวนรอบแรก ข้อมูลใน $book จะถูกกำหนดค่า ให้เท่ากับข้อมูลชุดแรกใน array @title ในการวนรอบครั้งต่อไป ก็จะมีค่าเท่ากับ ข้อมูลชุดที่สองใน array อย่างนี้ไปเรื่อยๆ จนกระทั่งหมดชุดข้อมูลใน array ถ้าหากว่า @title เป็น array ว่าง ชุดคำสั่งในเครื่องหมาย { .. } จะไม่ถูกกระทำ

 

เนื้อหาส่วนถัดไป.. ->