-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[15] Come si crea una variabile statica?

(contributo di brian d foy)

Perl non ha le variabili "statiche", alle quali si può avere accesso solo dalla funzione nella quale sono dichiarate. Però potete ottenere lo stesso effetto con le variabili lessicali.

Potete simulare una variabile statica usando una variabile lessicale che va al di fuori dello scope. In questo esempio, si definisce la subroutine contatore che usa la variabile lessicale $contatore. Dato che lo inserite in un blocco BEGIN, $contatore è definito a tempo di compilazione, ma esso va anche fuori dallo scope alla fine del blocco BEGIN. Il blocco BEGIN assicura anche che la subroutine e il valore che essa usa sia definito a tempo di compilazione di modo che la subroutine sia pronta all'uso proprio come ogni altra subroutine, e si possa inserire questo codice nella stessa posizione come per le altre subroutine nel testo del programma (ovvero, di solito, alla fine del codice). La subroutine contatore ha ancora un riferimento ai dati e questa è la sola maniera che avete per accedere al valore (ed ogni volta che lo fate, ne incrementate il valore). I dati nella porzione di memoria definita da $contatore è privata per contatore.

    BEGIN {
        my $contatore = 1;
        sub contatore { $contatore++ }
    }
    my $partenza = contatore();
    .... # codice che chiama contatore();
    my $fine = contatore();

Nell'esempio precedente, avete creato una variabile privata per una funzione perch<eacute> solo una funzione si è il suo riferimento. Potreste definire funzioni multiple mentre la variabile è nello scope, ed ogni funzione può condividere la variabile "privata". Non è davvero "statica" perché potete accedervi dal di fuori della funzione finché la variabile lessicale è nello scope e potete anche creare riferimenti ad essa. In questo esempio, incrementa_contatore e restituisci_contatore condividono la variabile. Una funzione incrementa il valore e l'altra semplicemente lo restituisce. Entrambe possono accedere a $contatore e visto che esso è andato al di fuori dello scope, non c'è altro modo per accedervi.

    BEGIN {
        my $contatore = 1;
        sub incrementa_contatore  { $contatore++ }
        sub restituisci_contatore { $contatore }
    }

Per dichiarare una variabile privata per un file, potete usare ancora una variabile lessicale. Un file è anche uno scope, dunque una variabile lessicale definita nel file non può essere vista da qualsiasi altro file.

Consultate perlsub/"Persistent Private Variables" ["Variabili Private Persistenti", NdT] per maggiori informazioni. La discussione sulle chiusure in perlref potrebbe aiutarvi anche se non abbiamo usato le subroutine anonime in questa risposta. Consultate perlsub/"Persistent Private Variables" per i dettagli.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google