Precedente: Costanti regexp normali, Su: Usare le costanti regexp [Contenuti][Indice]
Questa
sezione descrive una funzionalità disponibile solo in
gawk
.
Come visto
in
precedente,
le costanti regexp (/…/
) hanno uno strano posto nel
linguaggio awk
. In molti contesti, si comportano come
un’espressione:
‘$0 ~ /…/’. In altri contesti, denotano solo una regexp da
individuare. In nessun caso esse sono davvero “cittadine di serie A” del
linguaggio. Ovvero, non è possibile definire una variabile scalare il cui
tipo sia “regexp” nello stesso senso in cui si può definire una
variabile che sia un numero o una stringa:
num = 42 Variabile numerica str = "hi" Variabile di tipo stringa re = /pippo/ Errore! re è il risultato di $0 ~ /pippo/
Per alcuni casi di uso più avanzati, sarebbe bello poter avere costanti regexp che sono fortemente tipizzate; in altre parole, che sostituiscono una regexp utile per effettuare dei confronti, e non una semplice espressione regolare.
gawk
prevede questa funzionalità. Un’espressione regolare
fortemente tipizzata è molto simile a un’espressione regolare normale,
tranne per il fatto di essere preceduta dal simbolo ‘@’:
re = @/foo/ variabile regexp fortemente tipizzata
Le variabili regexp fortemente tipizzate non possono essere usate in ogni istruzione in cui compare un’espressione regolare normale. perché ciò renderebbe il linguaggio ancora più fuorviante. Queste espressioni possono essere usate solo in alcuni contesti:
case
di un’istruzione switch
(vedi la sezione L’istruzione switch
).
gensub()
,
gsub()
,
match()
,
patsplit()
,
split()
e
sub()
(vedi la sezione Funzioni di manipolazione di stringhe).
qualche_variabile
è di tipo regexp.
Inoltre, qualche_variabile
può essere usata con gli operatori ‘~’ e ‘!~’, passata a una
delle funzioni predefinite sopra elencate o passata come parametro
a una funzione definita dall’utente.
Si può usare la funzione predefinita typeof()
(vedi la sezione Funzioni per conoscere il tipo di una variabile)
per determinare se un parametro passato a una funzione
è una variabile di tipo regexp.
La vera efficacia di questa funzionalità consiste nella capacità di creare variabili il cui tipo è regexp. Tali variabili possono essere passate a funzioni definite dall’utente, senza gli inconvenenti che si hanno usando espressioni regolari calcolate, a partire da stringhe o da costanti di tipo stringa. Queste variabili possono anche essere passate utilizzando chiamate indirette a funzioni (vedi la sezione Chiamate indirette di funzione) e alle funzioni predefinite che accettano costanti di tipo regesp.
Quando sono usate per effettuare conversioni numeriche, le variabili regexp fortemente tipizzate vengono convertite alla cifra zero. Quando sono usate per effettuare conversioni a stringhe, vengono convertite al valore di stringa del testo della regexp originale.
Precedente: Costanti regexp normali, Su: Usare le costanti regexp [Contenuti][Indice]