Latest web development tutorials

แพคเกจ Perl และโมดูล

Perl แต่ละแพคเกจมีสัญลักษณ์ตารางไวยากรณ์คำนิยามแยก:

package mypack;

คำสั่งนี้กำหนดแพคเกจที่เรียกว่าmypack ในชื่อของตัวแปรทั้งหมดและซับรูทีนที่กำหนดไว้ต่อไปนี้จะถูกเก็บไว้ในตารางสัญลักษณ์ที่เกี่ยวข้องกับแพคเกจ, แพคเกจจนกว่าจะพบคำสั่งอื่นเพื่อให้ห่างไกล

ตารางสัญลักษณ์แต่ละคนมีชุดของตัวเองของตัวแปรซับรูทีนชื่อแต่ละกลุ่มไม่เกี่ยวข้องเพื่อให้คุณสามารถใช้ชื่อตัวแปรเดียวในแพคเกจที่แตกต่างกันซึ่งเป็นตัวแทนของตัวแปรที่แตกต่างกัน

การเข้าถึงจากหนึ่งแพคเกจให้กับตัวแปรแพคเกจอื่นคุณสามารถระบุ "ชื่อแพคเกจ + ลำไส้ใหญ่คู่ (: :) + ชื่อตัวแปร" วิธีการ

การจัดเก็บตัวแปรและชื่อ subroutineตารางสัญลักษณ์เริ่มต้นที่เกี่ยวข้องกับแพคเกจที่เรียกว่าหลักที่เชื่อมโยงหากโปรแกรมที่ถูกกำหนดไว้ในแพคเกจอื่น ๆ เมื่อคุณต้องการที่จะเปลี่ยนกลับไปใช้ตารางสัญลักษณ์เริ่มต้นคุณสามารถกำหนดแพ็กเกจหลัก:

package main;

ดังนั้นโปรแกรมต่อไปราวกับว่าไม่เคยกำหนดแพคเกจตัวแปรและชื่อ subroutine เป็นที่เก็บตามปกติ

ไฟล์ตัวอย่างต่อไปนี้มีแพ็กเกจหลักและฟู__PACKAGE__ ตัวแปรพิเศษสำหรับชื่อแพคเกจการส่งออก:

#!/usr/bin/perl

#  main 包
$i = 1; 
print "包名 : " , __PACKAGE__ , " $i\n"; 

package Foo;
#  Foo 包
$i = 10; 
print "包名 : " , __PACKAGE__ , " $i\n"; 

package main;
# 重新指定 main 包
$i = 100; 
print "包名 : " , __PACKAGE__ , " $i\n"; 
print "包名: " , __PACKAGE__ ,  " $Foo::i\n"; 

1;

โปรแกรมข้างต้นผลลัพธ์คือ:

包名 : main 1
包名 : Foo 10
包名 : main 100
包名: main 10

เริ่มต้นและโมดูล END

ภาษา Perl มีสองคำสำคัญ: BEGIN, END พวกเขาสามารถเป็นชุดเฉพาะกิจการของสคริปต์ที่ดำเนินการก่อนที่โปรแกรมจะวิ่งหรือร่างกายหลังจากทำงาน

ไวยากรณ์เป็นดังนี้:

BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
  • แต่ละบล็อกBEGIN แต่ก่อนที่จะดำเนินการงบอื่น ๆ ดำเนินการหลังจากสคริปต์ Perl โหลดและเรียบเรียง

  • แต่ละบล็อกEND ของงบดำเนินการก่อนที่จะจบการทำงานล่าม

  • เริ่มต้นและสิ้นสุดบล็อกเป็นประโยชน์อย่างยิ่งเมื่อคุณสร้างโมดูลPerl

ถ้าคุณไม่เข้าใจใหญ่เราจะเห็นอินสแตนซ์:

#!/usr/bin/perl

package Foo;
print "Begin 和 Block 实例\n";

BEGIN { 
    print "这是 BEGIN 语句块\n" 
}

END { 
    print "这是 END 语句块\n" 
}

1;

โปรแกรมข้างต้นผลลัพธ์คือ:

这是 BEGIN 语句块
Begin 和 Block 实例
这是 END 语句块

โมดูล Perl คืออะไร?

Perl5 กับแพคเกจ Perl เพื่อสร้างโมดูล

โมดูล Perl เป็นแพคเกจนำมาใช้ใหม่ชื่อโมดูลและชื่อแพคเกจเดียวกันนามสกุลไฟล์กำหนดไว้สำหรับ.pm

ด้านล่างเราจะกำหนด Foo.pm โมดูลรหัสดังต่อไปนี้:

#!/usr/bin/perl

package Foo;
sub bar { 
   print "Hello $_[0]\n" 
}

sub blat { 
   print "World $_[0]\n" 
}
1;

Perl โมดูลความเกี่ยวข้องทราบต่อไปนี้:

  • ฟังก์ชั่นและการใช้งานจะต้องใช้โมดูลโหลด

  • @ INC Perl เป็นพิเศษในตัวอาร์เรย์ที่มีเส้นทางไดเรกทอรีไปยังสถานที่ตั้งของห้องสมุดกิจวัตรโกหก

  • ต้องการและฟังก์ชั่นการใช้งานฟังก์ชั่นเรียกEVAL สั่งรันโค้ด

  • End1; ดำเนินการส่งกลับค่า TRUE นี้เป็นต้องมิฉะนั้นจะกลับข้อผิดพลาด


จำเป็นต้องใช้และฟังก์ชั่น

โมดูลสามารถเรียกโดยฟังก์ชั่นจำเป็นต้องมีดังต่อไปนี้:

#!/usr/bin/perl

require Foo;

Foo::bar( "a" );
Foo::blat( "b" );

นอกจากนี้คุณยังสามารถใช้ฟังก์ชั่นในการอ้างถึง:

<pre>
#!/usr/bin/perl

use Foo;

bar( "a" );
blat( "b" );

เราทราบความต้องการที่จะต้องมีการอ้างอิงถึงชื่อที่ระบุแพคเกจการทำงานและไม่จำเป็นต้องใช้ที่แตกต่างที่สำคัญระหว่างสองคือ:

  • 1 ต้องใช้สำหรับการโหลดโมดูล Perl หรือโปรแกรม (ต่อท้าย .pm สามารถละเว้น แต่ต้อง .pl)
  • 2 คำสั่งการใช้งาน Perl จะรวบรวมเมื่อนำต้อง Runtime เป็นที่รู้จัก
  • 3, Perl ใช้การแนะนำของโมดูล แต่ยังแนะนำของโมดูลย่อยโมดูล และมันก็ไม่ได้จะต้องแนะนำให้รู้จักกับคำสั่งใหม่
  • 4 ใช้จะมองไปที่ @ INC เริ่มต้นปัจจุบันภายในครั้งเดียวโมดูลไม่ได้อยู่ในคำ @ INC กับการใช้งานไม่ได้แนะนำ แต่อาจต้องใช้เส้นทางที่ระบุ
  • 5 ใช้อ้างอิงโมดูลถ้าชื่อโมดูลมี :: ลำไส้ใหญ่คู่ลำไส้ใหญ่จะเป็นสองเท่าเป็นตัวคั่นเส้นทางเทียบเท่าของยูนิกซ์ / หรือภายใต้ Windows \ เช่น:

    use MyDirectory::MyModule

คุณสามารถส่งออกรายการของสัญลักษณ์จากโมดูลโดยการเพิ่มคำสั่งต่อไปที่จะใช้โมดูล:

require Exporter;
@ISA = qw(Exporter);

@EXPORT อาร์เรย์ประกอบด้วยตัวแปรค่าเริ่มต้นและฟังก์ชั่นที่ได้มาจากชื่อ:

package Module;

require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(bar blat);  # 默认导出的符号

sub bar { print "Hello $_[0]\n" }
sub blat { print "World $_[0]\n" }
sub splat { print "Not $_[0]\n" }  # Not exported!

1;

สร้างโมดูล Perl

คุณสามารถสร้างโมดูล Perl กระจายของ Perl มาพร้อมกับเครื่องมือ h2xs

คุณสามารถพิมพ์ในโหมดบรรทัดคำสั่ง h2xs ดูรายการพารามิเตอร์ของมัน

ไวยากรณ์ h2xs:

$ h2xs -AX -n  ModuleName

พารามิเตอร์คำอธิบาย:

  • -A กลไก AUTOLOAD ละเว้น

  • -X ละเว้นองค์ประกอบ XS

  • -n ระบุชื่อนามสกุล

ตัวอย่างเช่นถ้าไฟล์Person.pm โมดูลของคุณใช้คำสั่งต่อไปนี้:

$ h2xs -AX -n Person

ดังกล่าวข้างต้นส่งออกโปรแกรมจะ:

Writing Person/lib/Person.pm
Writing Person/Makefile.PL
Writing Person/README
Writing Person/t/Person.t
Writing Person/Changes
Writing Person/MANIFEST

คนภายใต้ไดเรกทอรีที่คุณสามารถดูไดเรกทอรีที่เพิ่มเข้ามาใหม่และไฟล์คำอธิบาย:

  • Readme: ไฟล์นี้มีข้อมูลเกี่ยวกับการติดตั้งการอ้างอิงโมดูลข้อมูลลิขสิทธิ์และอื่น ๆ

  • การเปลี่ยนแปลง: แฟ้มบันทึกการเปลี่ยนแปลงนี้เป็นโครงการไฟล์ (การเปลี่ยนแปลงของคุณ)

  • Makefile.PL: นี่คือมาตรฐานสร้าง Perl Makefile ใช้ในการสร้างไฟล์ Makefile.PL เพื่อรวบรวมโมดูล

  • MANIFEST: ไฟล์นี้จะใช้ในการสร้างประเภทของการกระจาย tar.gz รุ่นโมดูลโดยอัตโนมัติ เพื่อให้คุณสามารถใส่โมดูล CPAN คุณจะได้รับการตีพิมพ์หรือแจกจ่ายให้กับคนอื่น ๆ มันมีรายชื่อของไฟล์ทั้งหมดของคุณในโครงการนี้

  • Person.pm: นี่คือไฟล์โมดูลหลักที่ประกอบด้วยรหัสสำหรับจัดการ mod_perl คุณ (รหัส Handler)

  • Person.t: สำหรับโมดูลนี้บางบททดสอบ โดยค่าเริ่มต้นมันเป็นเพียงแค่การตรวจสอบโมดูลโหลดคุณสามารถเพิ่มบางหน่วยทดสอบใหม่

  • T /: ไฟล์ทดสอบ

  • lib /: Directory การจัดเก็บข้อมูลแหล่งที่เกิดขึ้นจริง

คุณสามารถใช้น้ำมันดิน (Linux บน) คำสั่งไปยังไดเรกทอรีดังกล่าวข้างต้นบรรจุเป็น Person.tar.gz


ติดตั้งโมดูล Perl

เราก็สามารถบีบอัดไฟล์Person.tar.gz เพื่อขยายการติดตั้งให้ทำตามขั้นตอนต่อไปนี้:

tar xvfz Person.tar.gz
cd Person
perl Makefile.PL
make
make install

การทำงานครั้งแรก "Perl Makefile.PL" ในไดเรกทอรีปัจจุบันสร้าง Makefile;

แล้วเรียก "ให้" เพื่อรวบรวมและสร้างไฟล์ห้องสมุดต้อง;

ตามด้วย "ทำให้การทดสอบ" การทดสอบรวบรวมผลลัพธ์ที่ถูกต้องระยะสุดท้าย "ให้ติดตั้ง" เพื่อติดตั้งไฟล์ห้องสมุดเพื่อไดเรกทอรีระบบเพราะฉะนั้นตอนจบกระบวนการรวบรวมทั้งหมด