อะไรคือความแตกต่างระหว่าง.pm
(Perl module) และ.pl
(Perl script) ไฟล์?
กรุณาบอกเหตุผลที่เรากลับ1
จากไฟล์ ถ้าส่งคืน 2 หรืออย่างอื่นมันไม่ได้สร้างข้อผิดพลาดใด ๆ แล้วทำไมเราถึงกลับ1
จากโมดูล Perl?
อะไรคือความแตกต่างระหว่าง.pm
(Perl module) และ.pl
(Perl script) ไฟล์?
กรุณาบอกเหตุผลที่เรากลับ1
จากไฟล์ ถ้าส่งคืน 2 หรืออย่างอื่นมันไม่ได้สร้างข้อผิดพลาดใด ๆ แล้วทำไมเราถึงกลับ1
จากโมดูล Perl?
คำตอบ:
สิ่งสำคัญที่สุดคือนามสกุลไฟล์ที่คุณใช้ไม่มีความแตกต่างในการperl
ตีความไฟล์เหล่านั้น
อย่างไรก็ตามการใส่โมดูลลงใน.pm
ไฟล์ตามโครงสร้างไดเร็กทอรีบางอย่างที่ตามชื่อแพ็กเกจจะช่วยอำนวยความสะดวก ดังนั้นถ้าคุณมีโมดูลExample::Plot::FourD
และคุณใส่ไว้ในไดเรกทอรีExample/Plot/FourD.pm
ในเส้นทางในของคุณ@INC
แล้วuse
และจะทำสิ่งที่ถูกต้องเมื่อได้รับชื่อแพคเกจในขณะที่require
use Example::Plot::FourD
ไฟล์จะต้องคืนค่า true เป็นคำสั่งสุดท้ายเพื่อแสดงว่าการเรียกใช้รหัสเริ่มต้นใด ๆ ประสบความสำเร็จดังนั้นจึงเป็นเรื่องปกติที่จะต้องจบไฟล์ดังกล่าว
1;
เว้นแต่คุณจะแน่ใจว่าจะส่งคืนจริงเป็นอย่างอื่น แต่จะดีกว่าแค่ใส่1;
ในกรณีที่คุณเพิ่มงบมากขึ้นถ้า
EXPR
เป็นคำเปล่าrequire
จะถือว่านามสกุล ".pm" และแทนที่ "::" ด้วย "/" ในชื่อไฟล์ให้คุณเพื่อให้ง่ายต่อการโหลดโมดูลมาตรฐาน รูปแบบการโหลดโมดูลนี้ไม่เสี่ยงต่อการเปลี่ยนแปลงเนมสเปซของคุณ
สิ่งที่use
ต้องทำคือการหาชื่อไฟล์จากชื่อแพ็กเกจที่ระบุrequire
ไว้ในBEGIN
บล็อกและเรียกใช้import
บนแพ็กเกจ ไม่มีสิ่งใดที่ป้องกันไม่ให้คุณไม่ใช้use
แต่ทำตามขั้นตอนเหล่านั้นด้วยตนเอง
ยกตัวอย่างเช่นด้านล่างผมใส่Example::Plot::FourD
แพคเกจในไฟล์ที่เรียกว่าโหลดไว้ในสคริปต์ในแฟ้มt.pl
s.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
ด้วยค่าจริงใด ๆ จะทำ
A .pl เป็นสคริปต์เดียว
ใน. pm ( Perl Module ) คุณมีฟังก์ชันที่สามารถใช้จากสคริปต์ Perl อื่น ๆ :
โมดูล Perl เป็นส่วนหนึ่งของรหัส Perl ที่มีอยู่ในตัวซึ่งสามารถใช้โดยโปรแกรม Perl หรือโมดูล Perl อื่น ๆ มีแนวคิดคล้ายกับไลบรารีลิงก์ C หรือคลาส C ++
1
ไม่เป็นไร. มันสามารถเป็น2
ได้"foo"
ก็เป็น["a", "list"]
ได้ สิ่งที่สำคัญไม่ใช่0
หรือสิ่งอื่นใดที่ประเมินว่าเป็นเท็จหรือuse
ล้มเหลว