Ambito delle variabili

In modalità predefinita, tutte le variabili sono "globali": c'è un registro dei nomi di variabile condiviso dallo script principale e da qualunque funzione venga chiamata da esso. Le variabili nello script principale possono essere lette e modificate dall'interno delle funzioni, e le nuove variabili create all'interno delle funzioni vengono aggiunte all'elenco del dataset.

In alcuni casi, tuttavia, può essere utile creare variabili che siano locali, confinate a una particolare funzione. È possibile farlo usando la parola chiave my con genr. Se all'interno di una funzione si scrive


      genr x = espressione
    

viene creata una variabile globale (o viene modificata la variabile globale x se esiste già). Ma scrivendo


      genr my x = espressione
    

viene creata una nuova variabile x locale alla funzione, che scomparirà una volta che la funzione è stata eseguita. Se esiste già una variabile x al di fuori della funzione, essa verrà "mascherata": la variabile x esterna sarà inaccessibile all'interno della funzione e non sarà modificabile da comandi come genr x = … finché l'esecuzione della funzione non sarà terminata.

Questo comportamento è illustrato dallo script di esempio nella Sezione Esempio che mostra l'ambito delle variabili.

Quando una funzione, ad es. fun1, chiama un'altra funzione, fun2, tutte le variabili locali (my) di fun1 sono ereditate automaticamente dalla funzione "figlia" fun2. Queste variabili, tuttavia, possono essere mascherate nel modo descritto in precedenza creando delle variabili con lo stesso nome all'interno della funzione fun2.