มีหลายวิธีในการจัดการการใช้รหัสซ้ำใน Perl ตัวอย่างจำนวนมากไม่ได้ทำให้ชัดเจนถึงความแตกต่างระหว่างวิธีการและชั้นเรียนจำนวนมากที่ใช้อย่างน้อยสอง
ฉันแนะนำให้ใช้สไตล์ OO ให้มากที่สุดและใช้ EXPORTER เฉพาะเมื่อคุณมีคลาสอย่างน้อยสามคลาสขึ้นไปที่ต้องการฟังก์ชันกลุ่มยูทิลิตี้ที่ค่อนข้างเล็ก
ดังนั้น:
package Foo;
use Foo::Util qw(util) ;
use strict ;
sub foo {
}
sub bar {
}
1;
package Foo::Bar ;
use Foo ;
use Foo::Util qw(util) ;
our @ISA = qw(Foo) ;
use strict ;
sub bar {
}
1;
package Foo::Util ;
use Exporter ;
our @ISA = qw(Exporter) ;
our @EXPORT = qw(util) ;
use strict ;
sub util {
}
1;
ฉันชอบที่จะเห็นภาพวิธีการ OO และEXPORTER
วิธีการเป็นสองมิติที่แตกต่างกันของความพร้อมใช้งานของรหัสราวกับว่าฟังก์ชั่นเข้ามาในแพคเกจปัจจุบันจากแกน x หรือ y
ในตัวอย่างด้านบน:
Foo::Bar
ได้มาfoo()
จากวิธีการเรียนFoo
Foo::Bar
กำหนดbar()
วิธีการเพื่อให้วิธีการ polymorphic bar()
ไม่ได้มาจากชั้นเรียนFoo
ทั้งคลาสFoo
และFoo::Bar
รับEXPORTED
ฟังก์ชั่น ( ไม่ใช่เมท็อด ) util()
จากแพ็คเกจ ( ไม่ใช่คลาส )Foo::Util
ระบบทั้งสองดูเหมือนซับซ้อน แต่มียูทิลิตี้ที่ใช้งานได้จริงมาก การติดตามการสืบทอดหลายรายการสามารถทำให้เกิดความยุ่งยากได้อย่างรวดเร็ว ดังนั้นการมีมิติที่สองของความพร้อมใช้งานของรหัสช่วยให้คุณสามารถทำให้แผนภูมิการสืบทอดของคุณเล็กและจัดการได้
โดยทั่วไปถ้าฟังก์ชั่นเป็นเสาหินและเป็นใบ้ให้ใช้ EXPORTER หรือใช้การสืบทอด แต่ไม่ต้องกังวลกับการใช้EXPORTER
งานเลยเว้นแต่ว่าคุณจะทำมีแนวโน้มที่จะเกี่ยวข้องกับแพ็คเกจมากกว่า 3 หรือ 4 ชุด