Di Perl, apa perbedaan antara file .pm (Perl module) dan .pl (Perl script) file?

88

Apa perbedaan antara file .pm(Perl module) dan .pl(Perl script)?

Tolong beritahu saya juga mengapa kami kembali 1dari file. Jika mengembalikan 2 atau yang lainnya, itu tidak menghasilkan kesalahan apa pun, jadi mengapa kita kembali 1dari modul Perl?

pengguna380979
sumber
11
1tidak apa-apa. Bisa 2, bisa "foo", bisa ["a", "list"]. Yang penting adalah tidak 0, atau apa pun yang dinilai salah, atau useakan gagal.
Amadan
.pl sebenarnya adalah pustaka perl - skrip perl, seperti program C atau program yang ditulis dalam bahasa lain, tidak memiliki akhiran, kecuali pada sistem operasi yang memerlukannya untuk berfungsi, seperti windows.
Ingat Monica

Jawaban:

78

Pada intinya, ekstensi file yang Anda gunakan tidak membuat perbedaan tentang bagaimana perlmenafsirkan file-file itu.

Namun, meletakkan modul dalam .pmfile mengikuti struktur direktori tertentu yang mengikuti nama paket memberikan kemudahan. Jadi, jika Anda memiliki modul Example::Plot::FourDdan Anda meletakkannya di direktori Example/Plot/FourD.pmdi jalur di Anda @INC, maka usedan requireakan melakukan hal yang benar ketika diberi nama paket seperti di use Example::Plot::FourD.

File tersebut harus mengembalikan true sebagai pernyataan terakhir untuk menunjukkan keberhasilan eksekusi kode inisialisasi apa pun, jadi biasanya untuk mengakhiri file seperti itu dengan 1; kecuali Anda yakin itu akan mengembalikan true sebaliknya. Tetapi lebih baik hanya meletakkan 1;, jika Anda menambahkan lebih banyak pernyataan.

Jika EXPRbareword, anggaplah requireekstensi ".pm" dan ganti "::" dengan "/" di nama file Anda, untuk memudahkan memuat modul standar. Bentuk pemuatan modul ini tidak berisiko mengubah namespace Anda.

Yang perlu usedilakukan hanyalah mencari nama file dari nama paket yang disediakan, requiredalam BEGINblok dan memanggil importpaket. Tidak ada yang mencegah Anda untuk tidak menggunakan useselain mengambil langkah-langkah itu secara manual.

Misalnya, di bawah ini saya meletakkan Example::Plot::FourDpaket dalam sebuah file bernama t.pl, memuatnya dalam sebuah skrip dalam file 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

Contoh ini menunjukkan bahwa file modul tidak harus diakhiri 1, nilai true apa pun akan dilakukan.

Sinan Ünür
sumber
-2

A .pl adalah satu skrip.

Di .pm ( Perl Module ) Anda memiliki fungsi yang dapat Anda gunakan dari skrip Perl lainnya:

Modul Perl adalah bagian mandiri dari kode Perl yang dapat digunakan oleh program Perl atau modul Perl lainnya. Ini secara konseptual mirip dengan pustaka tautan C, atau kelas C ++.

Igor Oks
sumber
5
"A .pl adalah satu skrip." Tidak benar. Hanya pada sistem operasi yang rusak Anda perlu mengidentifikasi program Perl dengan ekstensi .pl. Dan aslinya .pl menunjukkan "Perl library" - subrutin eksternal yang Anda muat dengan perintah "require" atau "do".
Dave Cross