แต่ละแพ็คเกจใน Perl มีตารางสัญลักษณ์แยกกัน และไวยากรณ์คำจำกัดความคือ:
แพ็คเกจมายแพ็ค;
คำสั่งนี้กำหนดแพ็คเกจชื่อ mypack ชื่อของตัวแปรและรูทีนย่อยทั้งหมดที่กำหนดหลังจากนั้นจะถูกเก็บไว้ในตารางสัญลักษณ์ที่เกี่ยวข้องกับแพ็คเกจจนกว่าจะพบคำสั่ง แพ็คเกจ อื่น
ตารางสัญลักษณ์แต่ละตารางมีชุดของตัวแปรและชื่อรูทีนย่อยของตัวเอง แต่ละชุดของชื่อจะไม่เกี่ยวข้องกัน ดังนั้นชื่อตัวแปรเดียวกันจึงสามารถใช้ในแพ็คเกจที่แตกต่างกันเพื่อแสดงตัวแปรที่แตกต่างกันได้
หากต้องการเข้าถึงตัวแปรของแพ็คเกจอื่นจากแพ็คเกจเดียว คุณสามารถระบุได้โดย "ชื่อแพ็คเกจ + ทวิภาคคู่ (::) + ชื่อตัวแปร"
ตารางสัญลักษณ์ดีฟอลต์ที่เก็บชื่อของตัวแปรและรูทีนย่อยจะเชื่อมโยงกับแพ็คเกจชื่อ main หากมีการกำหนดแพ็คเกจอื่นในโปรแกรมและคุณต้องการเปลี่ยนกลับไปใช้ตารางสัญลักษณ์เริ่มต้น คุณสามารถระบุแพ็คเกจหลักอีกครั้งได้:แพคเกจหลัก;
ด้วยวิธีนี้ โปรแกรมต่อไปนี้จะทำหน้าที่เหมือนกับว่าไม่เคยมีการกำหนดแพ็คเกจมาก่อน และชื่อของตัวแปรและรูทีนย่อยจะถูกจัดเก็บตามปกติ
ไฟล์ในตัวอย่างต่อไปนี้เป็นแพ็คเกจหลักและแพ็คเกจ Foo ตัวแปรพิเศษ __PACKAGE__ ใช้เพื่อส่งออกชื่อแพ็กเกจ:
เมื่อรันโปรแกรมข้างต้น ผลลัพธ์ที่ได้คือ:
ชื่อแพ็คเกจ: main 1 ชื่อแพ็คเกจ: Foo 10 ชื่อแพ็คเกจ: main 100 ชื่อแพ็คเกจ: main 10
ภาษา Perl มีคำหลักสองคำ: BEGIN และ END แต่ละรายการสามารถมีชุดสคริปต์สำหรับดำเนินการก่อนหรือหลังการทำงานของโปรแกรม
รูปแบบไวยากรณ์เป็นดังนี้:
เริ่มต้น { ... }END { ... }BEGIN { ... }END { ... }
แต่ละโมดูล BEGIN จะถูกดำเนินการหลังจากโหลดและคอมไพล์สคริปต์ Perl แล้ว แต่ก่อนที่คำสั่งอื่นจะถูกดำเนินการ
แต่ละบล็อกคำสั่ง END จะถูกดำเนินการก่อนที่ล่ามจะออก
บล็อกคำสั่ง BEGIN และ END มีประโยชน์อย่างยิ่งเมื่อสร้างโมดูล Perl
หากคุณยังคงไม่เข้าใจ เราสามารถดูตัวอย่างได้:
เมื่อรันโปรแกรมข้างต้น ผลลัพธ์ที่ได้คือ:
นี่คือบล็อกคำสั่ง BEGIN และอินสแตนซ์บล็อก
ใน Perl5 แพ็คเกจ Perl ใช้เพื่อสร้างโมดูล
โมดูล Perl เป็นแพ็คเกจที่นำมาใช้ซ้ำได้ ชื่อของโมดูลจะเหมือนกับชื่อของแพ็คเกจ และส่วนต่อท้ายของไฟล์ที่กำหนดคือ .pm
ด้านล่างเรากำหนดโมดูล Foo.pm รหัสจะเป็นดังนี้:
มีบางสิ่งที่ควรทราบเกี่ยวกับโมดูลใน Perl:
ฟังก์ชั่น ที่ต้องการ และ การใช้งาน จะโหลดโมดูล
@INC เป็นอาร์เรย์พิเศษที่สร้างไว้ใน Perl ซึ่งมีเส้นทางไดเร็กทอรีไปยังตำแหน่งของไลบรารีรูทีน
ฟังก์ชัน need และ use เรียกใช้ฟังก์ชัน eval เพื่อรันโค้ด
1 ในตอนท้าย การดำเนินการส่งคืน TRUE ซึ่งจำเป็น มิฉะนั้นจะส่งคืนข้อผิดพลาด
สามารถเรียกโมดูลผ่านฟังก์ชัน need ดังที่แสดงด้านล่าง:
นอกจากนี้ยังสามารถอ้างอิงผ่านฟังก์ชันการใช้งาน:
เราสังเกตเห็นว่า need Reference จำเป็นต้องใช้ชื่อแพ็กเกจเพื่อระบุฟังก์ชัน แต่การอ้างอิงการใช้งานไม่ได้มีความแตกต่างหลักๆ ระหว่างทั้งสองคือ:
1. need ใช้ในการโหลดโมดูลหรือโปรแกรม Perl (สามารถละส่วนต่อท้าย .pm ได้ แต่ต้องมี .pl)
2. คำสั่งการใช้งาน Perl ถูกนำมาใช้ในเวลาคอมไพล์ และความต้องการถูกนำมาใช้ในขณะรันไทม์
3. เมื่อใช้ Perl แนะนำโมดูล มันจะแนะนำโมดูลย่อยของโมดูลด้วย อย่างไรก็ตาม ไม่สามารถแนะนำ need ได้และจะต้องประกาศอีกครั้ง
4. USE ถูกค้นหาในค่าเริ่มต้นปัจจุบัน @INC เมื่อโมดูลไม่อยู่ใน @INC จะไม่สามารถแนะนำโดยใช้ USE ได้ แต่ต้องระบุเส้นทางได้
5. เมื่อ USE อ้างถึงโมดูล ถ้าชื่อโมดูลมี :: ทวิภาคคู่ ทวิภาคคู่จะถูกใช้เป็นตัวคั่นเส้นทาง ซึ่งเทียบเท่ากับ / ภายใต้ Unix หรือ ภายใต้ Windows ชอบ:
ใช้ MyDirectory::MyModule
สัญลักษณ์รายการสามารถส่งออกจากโมดูลการใช้งานโดยเพิ่มคำสั่งต่อไปนี้:
ต้องการผู้ส่งออก;@ISA = qw (ผู้ส่งออก);
อาร์เรย์ @EXPORT ประกอบด้วยชื่อของตัวแปรและฟังก์ชันที่ส่งออกตามค่าเริ่มต้น:
package Module;require Exporter;@ISA = qw(Exporter);@EXPORT = qw(bar blat); #Default แถบย่อยสัญลักษณ์ที่ส่งออก { พิมพ์ "Hello $_[0]n" }sub blat { พิมพ์ "World $ _ [0]n" }เครื่องหมายย่อย { พิมพ์ "ไม่ใช่ $_[0]n" } # ไม่ได้ส่งออก!1;
เป็นเรื่องง่ายที่จะสร้างโมดูล Perl ผ่านเครื่องมือ h2xs ที่มาพร้อมกับการกระจาย Perl
คุณสามารถพิมพ์ h2xs ในโหมดบรรทัดคำสั่งเพื่อดูรายการพารามิเตอร์
รูปแบบไวยากรณ์ h2xs:
$ h2xs -AX -n ชื่อโมดูล
คำอธิบายพารามิเตอร์:
-A ละเว้นกลไกการโหลดอัตโนมัติ
-X ละเว้นองค์ประกอบ XS
-n ระบุชื่อของโมดูลส่วนขยาย
ตัวอย่างเช่น หากโมดูลของคุณอยู่ในไฟล์ Person.pm ให้ใช้คำสั่งต่อไปนี้:
$ h2xs -AX -n บุคคล
การรันโปรแกรมข้างต้นจะส่งผลให้:
คนเขียน/lib/Person.pmคนเขียน/Makefile.PLคนเขียน/READMEคนเขียน/t/Person.tคนเขียน/การเปลี่ยนแปลงคนเขียน/MANIFEST
ภายใต้ไดเร็กทอรี Person คุณสามารถดูไดเร็กทอรีที่เพิ่มใหม่และคำอธิบายไฟล์:
README: ไฟล์นี้มีข้อมูลการติดตั้งบางส่วน การขึ้นต่อกันของโมดูล ข้อมูลลิขสิทธิ์ ฯลฯ
การเปลี่ยนแปลง: ไฟล์นี้ทำหน้าที่เป็นไฟล์บันทึกการเปลี่ยนแปลงสำหรับโครงการของคุณ
Makefile.PL: นี่คือตัวสร้าง Perl Makefile มาตรฐาน ใช้เพื่อสร้างไฟล์ Makefile.PL เพื่อคอมไพล์โมดูล
รายการ: ไฟล์นี้ใช้เพื่อสร้างการแจกจ่ายเวอร์ชันโมดูลประเภท tar.gz โดยอัตโนมัติ ด้วยวิธีนี้ คุณสามารถนำโมดูลของคุณไปที่ CPAN และเผยแพร่หรือแจกจ่ายให้กับผู้อื่นได้ ประกอบด้วยรายการไฟล์ทั้งหมดที่คุณมีในโครงการนี้
Person.pm: นี่คือไฟล์โมดูลหลักที่มีโค้ดตัวจัดการ mod_perl ของคุณ
Person.t: สคริปต์ทดสอบบางส่วนสำหรับโมดูลนี้ โดยค่าเริ่มต้น มันจะตรวจสอบการโหลดโมดูลเท่านั้น คุณสามารถเพิ่มหน่วยทดสอบใหม่ได้
t/: ไฟล์ทดสอบ
lib/: ไดเร็กทอรีที่เก็บซอร์สโค้ดจริง
คุณสามารถใช้คำสั่ง tar (บน Linux) เพื่อจัดทำแพ็กเกจไดเร็กทอรีด้านบนลงใน Person.tar.gz
เราสามารถแตกไฟล์และติดตั้งไฟล์ Person.tar.gz ที่เราเพิ่งบีบอัดได้ โดยมีขั้นตอนดังนี้:
tar xvfz Person.tar.gzcd ติดตั้ง Personperl Makefile.PLmakemake
ขั้นแรกให้รัน "perl Makefile.PL" เพื่อสร้าง Makefile ในไดเร็กทอรีปัจจุบัน
จากนั้นเรียกใช้ "make" เพื่อคอมไพล์และสร้างไฟล์ไลบรารีที่ต้องการ
จากนั้นใช้ "make test" เพื่อทดสอบว่าผลการคอมไพล์ถูกต้องหรือไม่ สุดท้ายให้รัน "make install" เพื่อติดตั้งไฟล์ไลบรารีลงในไดเร็กทอรีระบบ และกระบวนการคอมไพล์ทั้งหมดจะสิ้นสุดลง