ใน Perl ไฟล์. pm (Perl module) กับ .pl (Perl script) ต่างกันอย่างไร


88

อะไรคือความแตกต่างระหว่าง.pm(Perl module) และ.pl(Perl script) ไฟล์?

กรุณาบอกเหตุผลที่เรากลับ1จากไฟล์ ถ้าส่งคืน 2 หรืออย่างอื่นมันไม่ได้สร้างข้อผิดพลาดใด ๆ แล้วทำไมเราถึงกลับ1จากโมดูล Perl?


11
1ไม่เป็นไร. มันสามารถเป็น2ได้"foo"ก็เป็น["a", "list"]ได้ สิ่งที่สำคัญไม่ใช่0หรือสิ่งอื่นใดที่ประเมินว่าเป็นเท็จหรือuseล้มเหลว
Amadan

.pl เป็นไลบรารี perl - สคริปต์ perl เช่นโปรแกรม C หรือโปรแกรมที่เขียนด้วยภาษาอื่นจะไม่มีการลงท้ายยกเว้นในระบบปฏิบัติการที่ต้องใช้หนึ่งในการใช้ฟังก์ชันเช่น windows
จำ Monica

คำตอบ:


78

สิ่งสำคัญที่สุดคือนามสกุลไฟล์ที่คุณใช้ไม่มีความแตกต่างในการperlตีความไฟล์เหล่านั้น

อย่างไรก็ตามการใส่โมดูลลงใน.pmไฟล์ตามโครงสร้างไดเร็กทอรีบางอย่างที่ตามชื่อแพ็กเกจจะช่วยอำนวยความสะดวก ดังนั้นถ้าคุณมีโมดูลExample::Plot::FourDและคุณใส่ไว้ในไดเรกทอรีExample/Plot/FourD.pmในเส้นทางในของคุณ@INCแล้วuseและจะทำสิ่งที่ถูกต้องเมื่อได้รับชื่อแพคเกจในขณะที่requireuse Example::Plot::FourD

ไฟล์จะต้องคืนค่า true เป็นคำสั่งสุดท้ายเพื่อแสดงว่าการเรียกใช้รหัสเริ่มต้นใด ๆ ประสบความสำเร็จดังนั้นจึงเป็นเรื่องปกติที่จะต้องจบไฟล์ดังกล่าว1; เว้นแต่คุณจะแน่ใจว่าจะส่งคืนจริงเป็นอย่างอื่น แต่จะดีกว่าแค่ใส่1;ในกรณีที่คุณเพิ่มงบมากขึ้น

ถ้าEXPRเป็นคำเปล่าrequireจะถือว่านามสกุล ".pm" และแทนที่ "::" ด้วย "/" ในชื่อไฟล์ให้คุณเพื่อให้ง่ายต่อการโหลดโมดูลมาตรฐาน รูปแบบการโหลดโมดูลนี้ไม่เสี่ยงต่อการเปลี่ยนแปลงเนมสเปซของคุณ

สิ่งที่useต้องทำคือการหาชื่อไฟล์จากชื่อแพ็กเกจที่ระบุrequireไว้ในBEGINบล็อกและเรียกใช้importบนแพ็กเกจ ไม่มีสิ่งใดที่ป้องกันไม่ให้คุณไม่ใช้useแต่ทำตามขั้นตอนเหล่านั้นด้วยตนเอง

ยกตัวอย่างเช่นด้านล่างผมใส่Example::Plot::FourDแพคเกจในไฟล์ที่เรียกว่าโหลดไว้ในสคริปต์ในแฟ้มt.pls.pl

C:\Temp> cat t.pl
package Example::Plot::FourD;

use strict; use warnings;

sub new { bless {} => shift }

sub something { print "something\n" }

"Example::Plot::FourD"

C:\Temp> cat s.pl
#!/usr/bin/perl
use strict; use warnings;

BEGIN {
    require 't.pl';
}

my $p = Example::Plot::FourD->new;
$p->something;


C:\Temp> s
something

ตัวอย่างนี้แสดงให้เห็นว่าไฟล์โมดูลไม่จำเป็นต้องลงท้าย1ด้วยค่าจริงใด ๆ จะทำ


-2

A .pl เป็นสคริปต์เดียว

ใน. pm ( Perl Module ) คุณมีฟังก์ชันที่สามารถใช้จากสคริปต์ Perl อื่น ๆ :

โมดูล Perl เป็นส่วนหนึ่งของรหัส Perl ที่มีอยู่ในตัวซึ่งสามารถใช้โดยโปรแกรม Perl หรือโมดูล Perl อื่น ๆ มีแนวคิดคล้ายกับไลบรารีลิงก์ C หรือคลาส C ++


5
"A .pl เป็นสคริปต์เดียว" ไม่จริง. เฉพาะในระบบปฏิบัติการที่เสียซึ่งคุณต้องระบุโปรแกรม Perl ที่มีนามสกุล. pl และเดิม. pl ระบุ "ไลบรารี Perl" - รูทีนย่อยภายนอกที่คุณโหลดด้วยคำสั่ง "ต้อง" หรือ "ทำ"
Dave Cross
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.