Successivo: , Precedente: , Su: Invocare Gawk   [Contenuti][Indice]


2.7 Come includere altri file nel proprio programma

Questa sezione descrive una funzionalità disponibile solo in gawk.

La direttiva @include può essere usata per leggere file sorgenti di awk esterni. Questo dà la possibilità di suddividere file sorgenti di awk di grandi dimensioni in porzioni più piccole e più maneggevoli, e anche di riutilizzare codice awk di uso comune da diversi script awk. In altre parole, si possono raggruppare funzioni di awk usate per eseguire determinati compiti all’interno di file esterni. Questi file possono essere usati proprio come librerie di funzioni, usando la direttiva @include assieme alla variabile d’ambiente AWKPATH. Si noti che i file sorgenti possono venire inclusi anche usando l’opzione -i.

Vediamolo con un esempio. Iniziamo con due script awk (banali), che chiameremo test1 e test2. Questo è lo script test1:

BEGIN {
    print "Questo è lo script test1."
}

e questo è test2:

@include "test1"
BEGIN {
    print "Questo è lo script test2."
}

L’esecuzione di gawk con test2 produce il seguente risultato:

$ gawk -f test2
-| Questo è lo script test1.
-| Questo è lo script test2.

gawk esegue lo script test2, il quale include test1, usando la direttiva @include. Così, per includere file sorgenti di awk esterni, basta usare @include seguito dal nome del file da includere, racchiuso tra doppi apici.

NOTA: Si tenga presente che questo è un costrutto del linguaggio e che nome-file non può essere una variabile di tipo stringa, ma solo una costante di tipo letterale racchiusa tra doppi apici.

I file da includere possono essere nidificati; p.es., dato un terzo script, che chiameremo test3:

@include "test2"
BEGIN {
    print "Questo è lo script test3."
}

L’esecuzione di gawk con lo script test3 produce i seguenti risultati:

$ gawk -f test3
-| Questo è lo script test1.
-| Questo è lo script test2.
-| Questo è lo script test3.

Il nome-file, naturalmente, può essere un nome di percorso. Per esempio:

@include "../funzioni_di_i_o"

e:

@include "/usr/awklib/network"

sono entrambi percorsi validi. La variabile d’ambiente AWKPATH può rivestire grande importanza quando si usa @include. Le stesse regole per l’uso della variabile d’ambiente AWKPATH nelle ricerche da riga di comando (vedi la sezione Ricerca di programmi awk in una lista di directory.) si applicano anche a @include.

Questo è di grande aiuto nella costruzione di librerie di funzioni di gawk. Se si ha uno script di grandi dimensioni contenente utili funzioni awk di uso comune, lo si può suddividere in file di libreria e mettere questi file in una directory dedicata. In seguito si possono includere queste “librerie” usando il percorso completo dei file, o impostando opportunamente la variabile d’ambiente AWKPATH e quindi usando @include con la sola parte del percorso completo che designa il file. Naturalmente, si possono tenere i file di libreria in più di una directory; più è complesso l’ambiente di lavoro, più directory possono essere necessarie per organizzare i file da includere.

Vista la possibilità di specificare opzioni -f multiple, il meccanismo @include non è strettamente necessario. Comunque, la direttiva @include può essere d’aiuto nel costruire programmi gawk autosufficienti, riducendo così la necessità di scrivere righe di comando complesse e tediose. In particolare, @include è molto utile per scrivere script CGI eseguibili da pagine web.

Le regole usate per trovare un file sorgente, descritte in Ricerca di programmi awk in una lista di directory., valgono anche per i file caricati tramite @include.

Infine, i file inclusi con @include sono considerati appartenere allo spazio-dei-nomi ‘"awk" (@namespace "awk")’ a inizio programma. Vedi la sezione Come cambiare lo spazio-dei-nomi, per ulteriori informazioni.


Successivo: , Precedente: , Su: Invocare Gawk   [Contenuti][Indice]