Come utilizzare saba di Perl script

Il compito. C'è uno script in linguaggio di programmazione Perl. In questa modalità è definita una funzione (saba). Bisogno di заиспользовать questa funzione in un altro script.

Ecco un esempio. Ci sono script script.pl in cui è definito il saba header. In questo sabu passando una stringa e restituisce la stringa in forma di markdown del titolo. In questo script questa saba viene utilizzato per visualizzare sullo schermo due titoli:

▶ Run
#!/usr/bin/perl

use feature qw(say);

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

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

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

Lanciando perl script.pl e vediamo sullo schermo:

## ONE
## TWO

Compito è quello di creare uno script other.pl che sarà anche utilizzare questo sabu.

La decisione — copy-paste

La cosa più semplice (ma di brutto) la decisione è sufficiente copiare il codice sabi in un altro script. Con questa soluzione si ottiene ecco così other.pl:

#!/usr/bin/perl

use feature qw(say);

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

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

say header('three');

È ora possibile eseguire questo script perl other.pl e vedere sullo schermo il testo ## THREE.

Questa è la soluzione del problema, ma è una cattiva decisione. A causa del fatto che lo stesso codice si trova in più file diventa difficile lavorare con questo codice. Quando il bisogno di cambiare questo sabu, è necessario cambiare in più punti (e ancora bisogno di non dimenticare di cambiare il codice in tutti i file).

La decisione — per portare sabu in un modulo separato

La decisione più corretta, è sopportare sabu in un modulo separato. Per questo creiamo il 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; - hanno annunciato che questa "biblioteca" Utils
  • use strict; e use warnings; — includiamo modalità per il Perl è stato più esigenti ad un buon codice
  • 5 righe pro EXPORT dicono che quando si collega questa "libreria" è necessario per la funzione header è disponibile
  • spostato qui la funzione
  • 1; — package deve sempre terminare con la verità

Dopo questa descrizione della funzione del bisogno di uno script script.pl di togliere, ma di aggiungere una connessione di libreria:

#!/usr/bin/perl

use feature qw(say);

use Utils;

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

Dopo di che è possibile eseguire lo stesso script con il comando perl -Ilib/ script.pl. L'opzione della riga di comando -I passando il valore lib/ — cartella in cui Perl cerca le librerie. Il risultato del lavoro di questo script è esattamente lo stesso come prima.

E ora è assolutamente banale заиспользовать questo stesso saba in un altro script. Scriviamo lo script other.pl, che è praticamente la stessa come script.pl:

#!/usr/bin/perl

use feature qw(say);

use Utils;

say header('three');

Lanciando questo script perl -Ilib/ other.pl e vediamo sullo schermo ## THREE.

La decisione — collegare il codice di script script

C'è un'altra soluzione possibile utilizzare sabu definita nello script script.pl заиспользовать in uno script other.pl. Per questo scriviamo questo testo in un file other.pl:

#!/usr/bin/perl

use feature qw(say);

require './script.pl';

say header('three');

Lanciando lo script perl other.pl (file other.pl deve essere nella stessa cartella e lo script script.pl). Risultato:

## ONE
## TWO
## THREE

Cioè è successo che durante l'esecuzione dello script other.pl innanzitutto è stato eseguito tutto il codice che è stato in script.pl (riga ## ONE e ## TWO), e solo successivamente è stato eseguito il codice di script other.pl (stringa ## THREE).

Per quando si esegue lo script other.pl non è stata eseguita la parte script.pl abbiamo bisogno di un po ' di cambiare script.pl. Bisogno di avvolgere tutto il codice nel corpo dello script sotto condizione, e scrivere alla fine dello script unità come il vero valore:

#!/usr/bin/perl

use feature qw(say);

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

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

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

1;

Ora se corriamo perl script.pl, otteniamo esattamente la stessa conclusione come prima, e se si inizia perl other.pl, quello in uscita sarà solo il testo ## THREE.

La parola chiave caller restituisce un diverso valore a seconda di come è stato lanciato lo script. Questa feature usiamo qui per dividere l'esecuzione dello script direttamente collegare lo script utilizzando require.

Altri articoli