Perl - Paket dan Modul
Apa Paket?
Itu packagePernyataan mengalihkan konteks penamaan saat ini ke namespace tertentu (tabel simbol). Jadi -
Paket adalah kumpulan kode yang berada di namespace-nya sendiri.
Namespace adalah kumpulan nama dari nama variabel unik (juga disebut tabel simbol).
Namespaces mencegah benturan nama variabel antar paket.
Paket memungkinkan konstruksi modul yang, jika digunakan, tidak akan mengganggu variabel dan fungsi di luar namespace modul itu sendiri.
Paket tetap berlaku sampai pernyataan paket lain dipanggil, atau sampai akhir dari blok atau file saat ini.
Anda dapat secara eksplisit merujuk ke variabel dalam sebuah paket menggunakan :: kualifikasi paket.
Berikut adalah contoh yang memiliki paket main dan Foo dalam sebuah file. Di sini variabel khusus __PACKAGE__ telah digunakan untuk mencetak nama paket.
#!/usr/bin/perl
# This is main package
$i = 1;
print "Package name : " , __PACKAGE__ , " $i\n";
package Foo;
# This is Foo package
$i = 10;
print "Package name : " , __PACKAGE__ , " $i\n";
package main;
# This is again main package
$i = 100;
print "Package name : " , __PACKAGE__ , " $i\n";
print "Package name : " , __PACKAGE__ , " $Foo::i\n";
1;
Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -
Package name : main 1
Package name : Foo 10
Package name : main 100
Package name : main 10
BEGIN dan END Block
Anda dapat menentukan sejumlah blok kode bernama BEGIN dan END, yang masing-masing bertindak sebagai konstruktor dan destruktor.
BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
Setiap BEGIN blok dijalankan setelah skrip perl dimuat dan dikompilasi tetapi sebelum pernyataan lain dieksekusi.
Setiap blok AKHIR dijalankan tepat sebelum interpreter perl keluar.
Blok BEGIN dan END sangat berguna saat membuat modul Perl.
Contoh berikut menunjukkan penggunaannya -
#!/usr/bin/perl
package Foo;
print "Begin and Block Demo\n";
BEGIN {
print "This is BEGIN Block\n"
}
END {
print "This is END Block\n"
}
1;
Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -
This is BEGIN Block
Begin and Block Demo
This is END Block
Apa itu Modul Perl?
Modul Perl adalah paket yang dapat digunakan kembali yang didefinisikan dalam file perpustakaan yang namanya sama dengan nama paket dengan ekstensi .pm.
File modul Perl bernama Foo.pm mungkin berisi pernyataan seperti ini.
#!/usr/bin/perl
package Foo;
sub bar {
print "Hello $_[0]\n"
}
sub blat {
print "World $_[0]\n"
}
1;
Beberapa poin penting tentang modul Perl
Fungsinya require dan use akan memuat modul.
Keduanya menggunakan daftar jalur pencarian di @INC untuk menemukan modul.
Kedua fungsi tersebut require dan use panggil eval berfungsi untuk memproses kode.
Itu 1; di bagian bawah menyebabkan eval mengevaluasi ke TRUE (dan dengan demikian tidak gagal).
Fungsi Membutuhkan
Sebuah modul dapat dimuat dengan memanggil require berfungsi sebagai berikut -
#!/usr/bin/perl
require Foo;
Foo::bar( "a" );
Foo::blat( "b" );
Anda pasti telah memperhatikan bahwa nama subrutin harus sepenuhnya memenuhi syarat untuk memanggilnya. Alangkah baiknya mengaktifkan subrutinbar dan blat untuk diimpor ke namespace kita sendiri sehingga kita tidak perlu menggunakan kualifikasi Foo ::.
Fungsi Penggunaan
Sebuah modul dapat dimuat dengan memanggil use fungsi.
#!/usr/bin/perl
use Foo;
bar( "a" );
blat( "b" );
Perhatikan bahwa kami tidak harus sepenuhnya memenuhi syarat nama fungsi paket. Ituuse function akan mengekspor daftar simbol dari modul yang diberi beberapa pernyataan tambahan di dalam modul.
require Exporter;
@ISA = qw(Exporter);
Kemudian, berikan daftar simbol (skalar, daftar, hash, subrutin, dll) dengan mengisi variabel daftar bernama @EXPORT: Misalnya -
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;
Buat Pohon Modul Perl
Ketika Anda siap untuk mengirimkan modul Perl Anda, maka ada cara standar untuk membuat Pohon Modul Perl. Ini dilakukan dengan menggunakanh2xsutilitas. Utilitas ini dilengkapi dengan Perl. Berikut adalah sintaks untuk menggunakan h2xs -
$h2xs -AX -n ModuleName
Misalnya, jika modul Anda tersedia di Person.pm file, lalu cukup jalankan perintah berikut -
$h2xs -AX -n Person
Ini akan menghasilkan hasil sebagai berikut -
Writing Person/lib/Person.pm
Writing Person/Makefile.PL
Writing Person/README
Writing Person/t/Person.t
Writing Person/Changes
Writing Person/MANIFEST
Berikut adalah penjelasan dari opsi-opsi ini -
-A menghilangkan kode Pemuat Otomatis (paling baik digunakan oleh modul yang menentukan sejumlah besar subrutin yang jarang digunakan).
-X menghilangkan elemen XS (eXternal Subrutin, di mana eXternal berarti di luar Perl, yaitu C).
-n menentukan nama modul.
Jadi perintah di atas membuat struktur berikut di dalam direktori Person. Hasil sebenarnya ditunjukkan di atas.
- Changes
- Makefile.PL
- MANIFEST (berisi daftar semua file dalam paket)
- README
- t / (file uji)
- lib / (Kode sumber sebenarnya ada di sini
Jadi akhirnya, kamu tarstruktur direktori ini menjadi file Person.tar.gz dan Anda dapat mengirimkannya. Anda harus memperbarui file README dengan instruksi yang benar. Anda juga dapat memberikan beberapa file contoh pengujian di direktori t.
Menginstal Modul Perl
Unduh modul Perl dalam bentuk file tar.gz. Gunakan urutan berikut untuk menginstal Modul PerlPerson.pm yang telah diunduh sebagai Person.tar.gz mengajukan.
tar xvfz Person.tar.gz
cd Person
perl Makefile.PL
make
make install
Interpreter Perl memiliki daftar direktori untuk mencari modul (array global @INC).