Pakej dan modul Perl


Setiap pakej dalam Perl mempunyai jadual simbol yang berasingan, dan sintaks definisi ialah:

package mypack;

Pernyataan ini mentakrifkan pakej bernama mypack, dan semua simbol yang ditakrifkan selepas itu. nama pembolehubah dan subrutin disimpan dalam jadual simbol yang dikaitkan dengan pakej sehingga pernyataan pakej lain ditemui.

Setiap jadual simbol mempunyai set pembolehubah dan nama subrutinnya sendiri. Setiap set nama tidak berkaitan, jadi nama pembolehubah yang sama boleh digunakan dalam pakej yang berbeza untuk mewakili pembolehubah yang berbeza.

Untuk mengakses pembolehubah pakej lain daripada satu pakej, anda boleh menentukannya dengan "nama pakej + bertitik dua ( :: ) + nama pembolehubah".

Jadual simbol lalai yang menyimpan nama pembolehubah dan subrutin dikaitkan dengan pakej bernama utama. Jika pakej lain ditakrifkan dalam atur cara dan anda ingin bertukar kembali menggunakan jadual simbol lalai, anda boleh menentukan semula pakej utama:


package main;

Dengan cara ini, atur cara berikut akan kelihatan seperti bermula dari Seolah-olah tiada pakej telah ditentukan, nama pembolehubah dan subrutin disimpan seperti biasa.

Fail dalam contoh berikut termasuk pakej utama dan Foo. Pembolehubah khas __PACKAGE__ digunakan untuk mengeluarkan nama pakej:


#!/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;

Laksanakan atur cara di atas, hasil output ialah:

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

modul BEGIN dan END

Bahasa Perl menyediakan dua kata kunci: BEGIN, END. Setiap satunya boleh mengandungi satu set skrip untuk pelaksanaan sebelum atau selepas badan program dijalankan.


Format sintaks adalah seperti berikut:

BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
  • Setiap modul BERMULA ​​dimuat dan disusun oleh skrip Perl Tetapi ia dilaksanakan sebelum penyataan lain dilaksanakan.

  • Setiap blok pernyataan END dilaksanakan sebelum penterjemah keluar. Blok

  • BEGIN ​​​​dan END amat berguna apabila membuat modul Perl.

Jika anda masih tidak faham, kita boleh lihat contoh:

#!/usr/bin/perl

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

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

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

1;

Jalankan program di atas, hasil output ialah:

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

Apakah modul Perl?

Perl5 menggunakan pakej Perl untuk mencipta modul.

Modul Perl ialah pakej yang boleh digunakan semula Nama modul adalah sama dengan nama pakej Akhiran fail yang ditakrifkan ialah .pm.

Di bawah kami mentakrifkan modul Foo.pm, kodnya adalah seperti berikut:

#!/usr/bin/perl

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

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

Anda perlu memberi perhatian kepada perkara berikut tentang modul dalam Perl:

  • Fungsi memerlukan dan penggunaan akan memuatkan modul.

  • @INC ialah tatasusunan khas terbina dalam Perl yang mengandungi laluan direktori ke lokasi rutin perpustakaan. Fungsi

  • memerlukan dan menggunakan fungsi eval untuk melaksanakan kod.

  • Tamat 1; pelaksanaan mengembalikan BENAR, yang diperlukan, jika tidak ralat dikembalikan.


Memerlukan dan Menggunakan fungsi Modul

boleh dipanggil melalui fungsi require seperti berikut:

#!/usr/bin/perl

require Foo;

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

Ia juga boleh dirujuk melalui fungsi penggunaan:

<pre>
#!/usr/bin/perl

use Foo;

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

Kami mendapati bahawa rujukan perlu menggunakan nama pakej untuk menentukan fungsi, tetapi penggunaan tidak digunakan untuk memuatkan modul atau Program perl (akhiran .pm boleh diabaikan, tetapi .pl mesti ada)

  • 2. Pernyataan penggunaan Perl diperkenalkan semasa penyusunan, dan memerlukan diperkenalkan semasa masa jalan

  • 3. Apabila penggunaan Perl memperkenalkan modul, ia juga memperkenalkan submodul modul. Dan keperluan tidak boleh diimport, ia mesti diisytiharkan semula

  • 4. USE ditemui dalam lalai semasa @INC Sebaik sahaja modul tiada dalam @INC, ia tidak boleh diimport menggunakan USE Ya, tetapi memerlukan boleh menentukan laluan

  • 5. Apabila USE merujuk kepada modul, jika nama modul mengandungi :: bertindih dua, bertindih berganda akan digunakan sebagai laluan pemisah, yang bersamaan dengan yang di bawah Unix /Atau di bawah Windows. Contohnya:

  • use MyDirectory::MyModule


    Anda boleh mengeksport simbol senarai daripada modul dengan menambah pernyataan berikut menggunakan modul:

    require Exporter;
    @ISA = qw(Exporter);
  • @EXPORT tatasusunan mengandungi Nama pembolehubah dan fungsi yang dieksport secara lalai:
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 modul Perl


Ia boleh dibuat dengan mudah melalui alat h2xs yang datang dengan pengedaran Perl.


Anda boleh menaip h2xs dalam mod baris arahan untuk melihat senarai parameternya.

format sintaks h2xs:

$ h2xs -AX -n  ModuleName

Penerangan parameter:

-A
    Abaikan mekanisme autoload
  • -X
  • Abaikan elemen XS
  • -n
  • Nyatakan nama modul sambungan
  • Sebagai contoh, jika modul anda berada dalam fail

    Person.pm
  • , gunakan arahan berikut:
$ h2xs -AX -n Person

Melaksanakan program di atas akan mengeluarkan:

Writing Person/lib/Person.pm
Writing Person/Makefile.PL
Writing Person/README
Writing Person/t/Person.t
Writing Person/Changes
Writing Person/MANIFEST
Direktori orang dalam anda Anda boleh melihat direktori dan penerangan fail yang baru ditambah:

README: Fail ini mengandungi beberapa maklumat pemasangan, kebergantungan modul, maklumat hak cipta, dsb.

  • Perubahan: Fail ini berfungsi sebagai fail changelog untuk projek anda.

  • Makefile.PL: Ini ialah pembina Perl Makefile standard. Digunakan untuk mencipta fail Makefile.PL untuk menyusun modul.

  • MANIFEST: Fail ini digunakan untuk membina pengedaran versi modul jenis tar.gz secara automatik. Dengan cara ini anda boleh membawa modul anda ke CPAN dan menerbitkannya atau mengedarkannya kepada orang lain. Ia mengandungi senarai semua fail yang anda ada dalam projek ini.

  • Person.pm: Ini ialah fail modul utama yang mengandungi kod pengendali mod_perl anda.

  • Person.t: Beberapa skrip ujian untuk modul ini. Secara lalai ia hanya menyemak pemuatan modul, anda boleh menambah beberapa unit ujian baharu.

  • t/: fail ujian

  • lib/: direktori tempat kod sumber sebenar disimpan

  • anda Direktori di atas boleh dibungkus sebagai Person.tar.gz menggunakan arahan tar (pada Linux).

Pasang modul Perl

Kami boleh menyahmampat dan memasang fail
Person.tar.gz

yang baru kami mampatkan langkah-langkahnya adalah seperti berikut:

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

Jalankan pertama "perl Makefile.PL" untuk menjana Makefile dalam direktori semasa;

Kemudian jalankan "make" untuk menyusun dan mencipta fail perpustakaan yang diperlukan;

Kemudian gunakan "make test" untuk menguji sama ada hasil kompilasi adalah betul, akhirnya jalankan "make install" untuk memasang fail perpustakaan direktori sistem, dan itu sahaja Keseluruhan proses penyusunan berakhir.