Cara menggunakan Saba dari Perl script

Tugas. Ada sebuah script dalam bahasa pemrograman Perl. Ini mendefinisikan beberapa fungsi (Saba). Anda perlu untuk Taipalsaari fungsi ini di script lain.

Berikut ini adalah contoh. Ada script script.pl yang mendefinisikan Saba header. Ini Saba lulus string, dan mengembalikan string ini dalam penurunan harga header. Dalam script ini Saba digunakan untuk menampilkan dua header:

▶ Run
#!/usr/bin/perl

use feature qw(say);

sub header {
    my ($string) = @_;

    return '## ' . uc($string);
}

say header('one');
say header('two');

Menjalankan perl script.pl lihat pada layar:

## ONE
## TWO

Tugas ini adalah untuk membuat script yang lain other.pl yang juga akan menggunakan Saba.

Solusi — copy-paste

Sederhana (tapi buruk) adalah solusi untuk copy kode subs di script lain. Solusi ini diperoleh berikut other.pl:

#!/usr/bin/perl

use feature qw(say);

sub header {
    my ($string) = @_;

    return '## ' . uc($string);
}

say header('three');

Anda sekarang dapat menjalankan script ini perl other.pl dan melihat pada layar teks ## THREE.

Ini solusi untuk masalah ini, tapi ini adalah keputusan yang buruk. Karena fakta bahwa kode yang sama adalah dalam beberapa file menjadi sulit untuk bekerja dengan kode tersebut. Ketika anda perlu untuk mengubah ini Saba, maka harus mengubah itu di beberapa tempat (dan masih harus ingat untuk mengubah kode di semua file yang tepat).

Solusinya adalah untuk menempatkan Saba dalam modul terpisah

Solusi yang tepat adalah dengan membuat sebuah Saba dalam modul terpisah. Untuk ini membuat file lib/Utils.pm:

package Utils;

use strict;
use warnings;

use Exporter;

our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
    header
);
our @EXPORT = @EXPORT_OK;

sub header {
    my ($string) = @_;

    return '## ' . uc($string);
}

1;
  • package Utils; - mengumumkan bahwa "perpustakaan" Utils
  • use strict; dan use warnings; — switch mode untuk Perl adalah lebih menuntut kode yang baik
  • 5 baris tentang EXPORT menunjukkan bahwa ketika anda menghubungkan bahwa perpustakaan harus berfungsi header telah tersedia
  • pindah fungsi
  • 1; — paket harus berakhir dengan kebenaran

Setelah ini keterangan dari fungsi yang anda butuhkan dari script script.pl untuk membersihkan, tetapi menambahkan koneksi perpustakaan:

#!/usr/bin/perl

use feature qw(say);

use Utils;

say header('one');
say header('two');

Anda kemudian dapat menjalankan script yang menggunakan perintah perl -Ilib/ script.pl. Pada command line -I lulus nilai lib/ — direktori mana Perl akan pencarian untuk perpustakaan. Hasil dari script ini adalah persis sama seperti sebelumnya.

Dan sekarang benar-benar sepele untuk Taipalsaari sama Saba di script lain. Menulis script other.pl, yang hampir sama seperti script.pl:

#!/usr/bin/perl

use feature qw(say);

use Utils;

say header('three');

Menjalankan script ini perl -Ilib/ other.pl lihat pada layar ## THREE.

Solusi — menghubungkan kode script script

Ada solusi lain yang dapat anda gunakan Saba didefinisikan dalam naskah script.pl untuk Taipalsaari dalam naskah other.pl. Untuk melakukan ini, menulis teks ini ke file other.pl:

#!/usr/bin/perl

use feature qw(say);

require './script.pl';

say header('three');

Menjalankan script perl other.pl (file other.pl harus dalam folder yang sama dengan script script.pl). Hasilnya:

## ONE
## TWO
## THREE

Sehingga ketika anda menjalankan script other.pl pertama kali dibuat semua kode yang itu script.pl (baris ## ONE dan ## TWO), dan hanya kemudian menjalankan kode script other.pl (line ## THREE).

Agar ketika anda menjalankan script other.pl tidak dilakukan bagian script.pl kita perlu sedikit perubahan script.pl. Anda perlu untuk membungkus seluruh kode dalam script tubuh di bawah kondisi dan menulis di akhir naskah unit sebagai nilai yang benar:

#!/usr/bin/perl

use feature qw(say);

sub header {
    my ($string) = @_;

    return '## ' . uc($string);
}

if ( not caller() ) {
    say header('one');
    say header('two');
}

1;

Sekarang jika kita menjalankan perl script.pl, kita mendapatkan output yang sama persis seperti sebelumnya, dan jika anda mulai perl other.pl, maka output akan menjadi satu-satunya teks yang diinginkan ## THREE.

Kata kunci caller mengembalikan nilai yang berbeda tergantung pada bagaimana anda memulai script. Fitur ini kami gunakan di sini untuk membagi menjalankan script langsung script koneksi menggunakan require.

Artikel lainnya