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

 

บทที่ 7 : การแปล การแทนที่ และการเปลี่ยน (Substitution and translation)

จากความสามารถของ regular expression โปรแกรมภาษา Perl สามารถนำมาใช้ใน การแทนที่ข้อมูลที่ต้องการได้ โดยใช้ function ชื่อ s

เริ่มตัวอย่างกันเลยดีกว่านะครับ ถ้าหากว่าเราต้องการ ที่จะเปลี่ยนคำว่า bangkok เป็น Bangkok สามารถทำได้โดยใช้ expression ต่อไปนี้

$data =~ s/bangkok/Bangkok/

 

และถ้าหาก ใช้กับตัวแปร $_ ก็สามารถเขียน expression ได้ดังนี้

s/bangkok/Bangkok/

 

อย่าลืมว่า regular expression ทั้งสอง (bangkok และ Bangkok) จะต้องอยู่ใน เครื่องหมาย / ผลลัพธ์ของ expression นี้ก็คือ ผลของการแทนที่ 0 คือ false และ 1 คือ true

เพิ่มเติม

 

จากตัวอย่างข้างต้น จะมีการเปลี่ยนแปลง เฉพาะตัวอักษรแรก ของคำเท่านั้น ในบางครั้งเมื่อเราต้องการ ที่จะแทนที่ตัวอักษรมากกว่า 1 ตัว(เช่น 1 ย่อหน้า) สามารถทำได้โดยใช้ option g ระบุต่อท้าย / ตัวสุดท้ายเข้าไป ดังตัวอย่าง

s/bangkok/Bangkok/g

ผลลัพธ์ของ expression นี้จะให้ค่าออกมา เป็นจำนวนของการแทนที่ ซึ่งจะมี 0 (false) หรือเลขใดๆ ก็ตามที่มากกว่า 0 (true)

ถ้าหากว่าต้องการ ที่จะแทนที่คำเช่น BAnGkok, banGkOK หรือ bAnGkOk เราจะระบุว่า

s/[Bb][Aa][Nn][Gg][Kk][Oo][Kk]/Bagnkok/g

 

แต่มีอีกวิธีที่ง่ายกว่านั้น คือการใช้ option i (ignore case) ต่อท้าย expression เพื่อเป็นการระบุว่า ไม่ต้องสนใจความต่าง ระหว่างตัวเล็ก และตัวใหญ่ (case sensitive) ดังตัวอย่าง

s/bangkok/Bangkok/gi

 

หมายเหตุ : option i สามารถใช้ได้กับ regular expression /../ อื่นๆได้ด้วยเช่นกัน

การแปล (Translation)

 

การแปลสามารถ ทำได้โดยใช้ function tr ซึ่งสามารถใช้แปล แบบตัวอักษรต่อตัวอักษรได้ ตัวอย่างต่อไปนี้จะเป็น การแปลตัวอักษร a ด้วยตัวอักษร e ตัวอักษร b ด้วยตัวอักษร d และ ตัวอักษร c ด้วยตัวอักษร f ผลลัพธ์ของ expression คือจำนวน ของการแปลที่เกิดขึ้น

$data =~ tr/abc/edf/

 

สัญลักษณ์พิเศษของ regular ส่วนมาก จะไม่สามารถใช้ได้กับ function tr เช่นตัวอย่างต่อไปนี้ จะเป็นการนับจำนวน เครื่องหมายดอกจัน ในตัวแปร $data และเก็บค่าที่นับ ได้ไว้ในตัวแปร $counter

$counter = ($data =~ tr/*/*/);

 

อย่างไรก็ตาม เครื่องหมาย - (ขีดกลาง) ก็ยังใช้หมายถึง "ระหว่าง" อยู่เหมือนเดิม ตัวอย่างต่อไปนี้ จะเปลี่ยนข้อมูลในตัวแปร $_ ให้เป็นอักษรตัวตัวใหญ่

tr/a-z/A-Z/;

 

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