Perl - Variabili speciali

Ci sono alcune variabili che hanno un significato predefinito e speciale in Perl. Sono le variabili che utilizzano i caratteri di punteggiatura dopo il solito indicatore di variabile ($, @ o%), come $ _ (spiegato di seguito).

La maggior parte delle variabili speciali ha un nome lungo simile a quello inglese, ad esempio, variabile di errore del sistema operativo $! può essere scritto come $ OS_ERROR. Ma se hai intenzione di usare nomi simili all'inglese, dovresti inserire una rigause English;all'inizio del file di programma. Questo guida l'interprete a cogliere il significato esatto della variabile.

La variabile speciale più comunemente usata è $ _, che contiene l'input predefinito e la stringa di ricerca del modello. Ad esempio, nelle righe seguenti:

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print $_;
   print "\n";
}

Quando viene eseguito, questo produrrà il seguente risultato:

hickory
dickory
doc

Di nuovo, controlliamo lo stesso esempio senza usare esplicitamente la variabile $ _ -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print;
   print "\n";
}

Quando viene eseguito, questo produrrà anche il seguente risultato:

hickory
dickory
doc

La prima volta che il ciclo viene eseguito, viene stampato "hickory". La seconda volta viene stampato "dickory" e la terza volta "doc". Questo perché in ogni iterazione del ciclo, la stringa corrente viene inserita in $ _ e viene utilizzata per impostazione predefinita da print. Ecco i punti in cui Perl assumerà $ _ anche se non lo specifichi -

  • Varie funzioni unarie, incluse funzioni come ord e int, nonché tutti i test di file (-f, -d) tranne -t, che per impostazione predefinita è STDIN.

  • Varie funzioni di elenco come stampa e scollega.

  • Le operazioni di corrispondenza dei modelli m //, s /// e tr /// se usate senza un operatore = ~.

  • La variabile iteratore predefinita in un ciclo foreach se non viene fornita alcuna altra variabile.

  • La variabile iteratore implicita nelle funzioni grep e map.

  • Il luogo predefinito in cui inserire un record di input quando il risultato di un'operazione di input di riga viene testato da solo come unico criterio di un test while (cioè). Nota che al di fuori di un test di durata, questo non accadrà.

Tipi di variabili speciali

In base all'uso e alla natura delle variabili speciali, possiamo classificarle nelle seguenti categorie:

  • Variabili speciali scalari globali.
  • Variabili speciali dell'array globale.
  • Variabili speciali hash globali.
  • Filehandle speciali globali.
  • Costanti speciali globali.
  • Variabili speciali delle espressioni regolari.
  • Variabili speciali Filehandle.

Variabili speciali scalari globali

Ecco l'elenco di tutte le variabili speciali scalari. Abbiamo elencato i nomi simili in inglese insieme ai nomi simbolici.

$ _ Lo spazio di input e di ricerca pattern predefinito.
$ ARG
$. Il numero di riga di input corrente dell'ultimo filehandle letto. Una chiusura esplicita sul filehandle ripristina il numero di riga.
$ NR
$ / Il separatore di record di input; nuova riga per impostazione predefinita. Se impostato sulla stringa nulla, tratta le righe vuote come delimitatori.
$ RS
$, Il separatore del campo di output per l'operatore di stampa.
$ OFS
$ \ Il separatore di record di output per l'operatore di stampa.
$ ORS
$ " Come "$," tranne per il fatto che si applica ai valori di lista interpolati in una stringa tra virgolette (o una stringa interpretata simile). L'impostazione predefinita è uno spazio.
$ LIST_SEPARATOR
$; Il separatore di pedici per l'emulazione di array multidimensionali. L'impostazione predefinita è "\ 034".
$ SUBSCRIPT_SEPARATOR
$ ^ L Che formato produce per eseguire un formfeed. L'impostazione predefinita è "\ f".
$ FORMAT_FORMFEED
$: Il set corrente di caratteri dopo il quale una stringa può essere interrotta per riempire i campi di continuazione (che iniziano con ^) in un formato. L'impostazione predefinita è "\ n" ".
$ FORMAT_LINE_BREAK_CHARACTERS
$ ^ A Il valore corrente dell'accumulatore di scrittura per le righe di formato.
$ ACCUMULATORE
$ # Contiene il formato di output per i numeri stampati (deprecato).
$ OFMT
$? Lo stato restituito dall'ultima chiusura pipe, comando backtick (``) o operatore di sistema.
$ CHILD_ERROR
$! Se utilizzato in un contesto numerico, restituisce il valore corrente della variabile errno, identificando l'ultimo errore della chiamata di sistema. Se utilizzato in un contesto stringa, restituisce la stringa di errore di sistema corrispondente.
$ OS_ERROR o $ ERRNO
$ @ Il messaggio di errore di sintassi Perl dall'ultimo comando eval.
$ EVAL_ERROR
$$ Il pid del processo Perl che esegue questo script.
$ PROCESS_ID o $ PID
$ < L'ID utente reale (uid) di questo processo.
$ REAL_USER_ID o $ UID
$> L'ID utente effettivo di questo processo.
$ EFFECTIVE_USER_ID o $ EUID
$ ( Il vero ID gruppo (gid) di questo processo.
$ REAL_GROUP_ID o $ GID
$) Il gid efficace di questo processo.
$ EFFECTIVE_GROUP_ID o $ EGID
$ 0 Contiene il nome del file contenente lo script Perl in esecuzione.
$ PROGRAM_NAME
$ [ L'indice del primo elemento in una matrice e del primo carattere in una sottostringa. L'impostazione predefinita è 0.
$] Restituisce la versione più il livello di patch diviso per 1000.
$ PERL_VERSION
$ ^ D Il valore corrente dei flag di debug.
$ DEBUGGING
$ ^ E Messaggio di errore esteso su alcune piattaforme.
$ EXTENDED_OS_ERROR
$ ^ F Il descrittore di file di sistema massimo, normalmente 2.
$ SYSTEM_FD_MAX
$ ^ H Contiene suggerimenti interni per il compilatore abilitati da alcuni moduli pragmatici.
$ ^ I Il valore corrente dell'estensione inplace-edit. Usa undef per disabilitare la modifica sul posto.
$ INPLACE_EDIT
$ ^ M Il contenuto di $ M può essere utilizzato come un pool di memoria di emergenza nel caso in cui Perl muoia con un errore di memoria insufficiente. L'uso di $ M richiede una compilazione speciale di Perl. Vedere il documento INSTALL per ulteriori informazioni.
$ ^ O Contiene il nome del sistema operativo per cui è stato compilato il binario Perl corrente.
$ OSNAME
$ ^ P Il flag interno che il debugger cancella in modo che non esegua il debug da solo.
$ PERLDB
$ ^ T L'ora in cui lo script ha iniziato a essere eseguito, in secondi dall'epoca.
$ BASETIME
$ ^ W Il valore corrente dell'interruttore di avviso, vero o falso.
$ ATTENZIONE
$ ^ X Il nome con cui è stato eseguito il binario Perl stesso.
$ EXECUTABLE_NAME
$ ARGV Contiene il nome del file corrente durante la lettura da <ARGV>.

Variabili speciali dell'array globale

@ARGV L'array contenente gli argomenti della riga di comando destinati allo script.
@INC L'array contenente l'elenco delle posizioni in cui cercare gli script Perl che devono essere valutati dai costrutti do, require o use.
@F L'array in cui vengono suddivise le righe di input quando viene fornita l'opzione -a della riga di comando.

Variabili speciali hash globali

% INC L'hash contenente le voci per il nome del file di ogni file che è stato incluso tramite do or require.
% ENV L'hash contenente l'ambiente corrente.
% SIG L'hash utilizzato per impostare i gestori di segnali per vari segnali.

Filehandle speciali globali

ARGV Lo speciale filehandle che itera sui nomi dei file della riga di comando in @ARGV. Di solito scritto come filehandle null in <>.
STDERR Il filehandle speciale per l'errore standard in qualsiasi pacchetto.
STDIN Lo speciale filehandle per lo standard input in qualsiasi pacchetto.
STDOUT Lo speciale filehandle per lo standard output in qualsiasi pacchetto.
DATI Lo speciale filehandle che fa riferimento a tutto ciò che segue il token __END__ nel file contenente lo script. Oppure, il filehandle speciale per qualsiasi cosa che segue il token __DATA__ in un file richiesto, purché tu stia leggendo i dati nello stesso pacchetto in cui è stato trovato __DATA__.
_ (trattino basso) Lo speciale filehandle utilizzato per memorizzare nella cache le informazioni dall'ultimo operatore di test stat, lstat o file.

Costanti speciali globali

__FINE__ Indica la fine logica del programma. Qualsiasi testo seguente viene ignorato, ma può essere letto tramite il filehandle DATA.
__FILE__ Rappresenta il nome del file nel punto del programma in cui viene utilizzato. Non interpolato in stringhe.
__LINEA__ Rappresenta il numero di riga corrente. Non interpolato in stringhe.
__PACCHETTO__ Rappresenta il nome del pacchetto corrente in fase di compilazione o non definito se non è presente alcun pacchetto corrente. Non interpolato in stringhe.

Variabili speciali delle espressioni regolari

$ cifra Contiene il testo abbinato dal set di parentesi corrispondente nell'ultimo modello trovato. Ad esempio, $ 1 corrisponde a tutto ciò che era contenuto nella prima serie di parentesi nell'espressione regolare precedente.
$ & La stringa corrispondente all'ultima corrispondenza di pattern riuscita.
$ MATCH
$ ` La stringa che precede ciò che è stato trovato per l'ultima corrispondenza di pattern riuscita.
$ PREMATCH
$ ' La stringa che segue ciò che è stato trovato nell'ultima corrispondenza di pattern riuscita.
$ POSTMATCH
$ + L'ultima parentesi che corrisponde all'ultimo pattern di ricerca. Questo è utile se non sai quale di un insieme di modelli alternativi è stato abbinato. Ad esempio: / Version: (. *) | Revision: (. *) / && ($ rev = $ +);
$ LAST_PAREN_MATCH

Variabili speciali Filehandle

$ | Se impostato su diverso da zero, forza un fflush (3) dopo ogni scrittura o stampa sul canale di output attualmente selezionato.
$ OUTPUT_AUTOFLUSH
$% Il numero di pagina corrente del canale di uscita attualmente selezionato.
$ FORMAT_PAGE_NUMBER
$ = La lunghezza della pagina corrente (righe stampabili) del canale di output attualmente selezionato. L'impostazione predefinita è 60.
$ FORMAT_LINES_PER_PAGE
$ - Il numero di righe rimaste nella pagina del canale di uscita attualmente selezionato.
$ FORMAT_LINES_LEFT
$ ~ Il nome del formato di report corrente per il canale di output attualmente selezionato. Il valore predefinito è il nome del filehandle.
$ FORMAT_NAME
$ ^ Il nome del formato di inizio pagina corrente per il canale di output attualmente selezionato. Il valore predefinito è il nome del filehandle con _TOP aggiunto.
$ FORMAT_TOP_NAME