Precedente: , Su: Usare le costanti regexp   [Contenuti][Indice]


6.1.2.2 Costanti regexp fortemente tipizzate

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:

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: , Su: Usare le costanti regexp   [Contenuti][Indice]