Importa nel package corrente alcune semantiche dal modulo indicato, in generale creando un alias per determinate subroutine all'interno del vostro package. È esattamente equivalente a:
BEGIN { require Modulo; import Modulo LISTA; }
tranne per il fatto che Modulo deve essere una bareword (*).
VERSIONE può essere sia un argomento numerico come 5.006, il quale viene poi
confrontato con $], oppure un valore testuale nella forma di v5.6.1, che viene poi
confrontato con $^V (conosciuto anche come $PERL_VERSION). Se VERSIONE è
più grande della versione dell'interprete Perl corrente, viene prodotto un errore
bloccante al momento dell'esecuzione. Fate un confronto con require, che
può compiere un controllo di questo tipo al momento dell'esecuzione.
In genere, bisognerebbe evitare di specificare VERSIONE come un valore testuale nella forma v5.6.1, poiché ciò causa, sotto versioni vecchie del Perl che non supportano questa sintassi, dei messaggi di errore fuorvianti. Al suo posto dovrebbe essere usata la versione numerica.
use v5.6.1; # controllo di versione al momento della compilazione
use 5.6.1; # uguale
use 5.006_001; # uguale; preferibile per compatibilita` all'indietro
Questo è spesso utile se avete bisogno di controllare la versione di Perl
corrente prima prima di chiamare use per usare dei moduli di libreria che avere
modificato in maniera incompatibile con le versioni più vecchie di Perl.
(Cerchiamo di non fare questo più di quanto siamo costretti).
Il blocco BEGIN forza require ed import ad essere eseguiti al momento della
compilazione. L'istruzione require assicura che il modulo venga caricato in memoria,
se non lo è già. L'istruzione import non è integrata in
Perl--è semplicemente una normale chiamata ad un metodo statico all'interno del
package Module, allo scopo di dire al modulo di importare la lista di caratteristiche
nel package corrente. Il modulo può implementare il suo metodo import come
desidera, anche se la maggior parte dei moduli decidono semplicemente di derivarlo,
utilizzando l'ereditarietà, dalla classe Exporter definita nel modulo
Exporter. Consultate Exporter. Se non si riesce a trovare alcun metodo import,
la chiamata viene saltata.
Se non volete chiamare il metodo import del package (per esempio allo scopo di evitare
l'alterazione del vostro spazio dei nomi), fornite esplicitamente una lista vuota:
use Modulo ();
Questo equivale esattamente a
BEGIN { require Modulo }
Se tra Modulo e LISTA è presente l'argomento VERSIONE, allora use
chiamerà il metodo VERSIONE nella classe Modulo passandogli come argomento la
versione indicata. Il metodo di default VERSIONE, ereditato dalla classe UNIVERSAL, muore
se la versione indicata è maggior del valore della variabile $Modulo::VERSIONE.
Inoltre, c'è una distinzione tra omettere LISTA (import chiamata senza
argomenti) ed un'esplicita LISTA vuota () (import non è chiamata). Va
notato che non c'è alcuna virgola dopo VERSIONE!
Siccome quest'interfaccia è molto aperta, i pragma (direttive del compilatore) sono anch'essi implementati in questo modo. Le direttive implementate al momento sono:
use constant;
use diagnostics;
use integer;
use sigtrap qw(SEGV BUS);
use strict qw(subs vars refs);
use subs qw(afunc blurfl);
use warnings qw(all);
use sort qw(stable _quicksort _mergesort);
Alcuni di questi pseudomoduli importano le semantiche nel corrente blocco dello scope
(ad esempio strict o integer, a differenza dei moduli ordinari che importano
simboli nel package corrente (che hanno effetti fino alla fine del file)).
C'è un corrispondente comando no che annulla l'importazione di quanto
importate da use, cioè chiama unimport Modulo LISTA anziché
import.
no integer;
no strict 'refs';
no warnings;
Consultate perlmodlib per una lista di moduli e di direttive standard. Consultate
perlrun per le opzioni da linea di comando -M e -m, che rendono accessibili le
funzionalità di use dalla linea di comando.
(*) Letteralmente parola nuda, indica una parola che potrebbe essere la chiamata di una funzione (ma non ha né & all'inizio né () alla fine) ed è per questo ambigua per perl a tempo di compilazione. In assenza di use strict 'subs' (che genera errore) viene trattata come se fosse inclusa tra virgolette. [NdT]