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



 


indietro

[16] Qual è la differenza tra visibilità dinamica e visibilità lessicale (o statica)? Qual è la differenza tra local() e my()?

local($x) salvaguarda il vecchio valore della variabile globale $x e le assegna un nuovo valore per la durata della subroutine. Tale valore è visibile nelle funzioni chiamate da detta subroutine. Tutto ciò viene fatto al momento dell'esecuzione, per cui si parla di visibilità dinamica. local() opera sempre su variabili globali, che vengono chiamate anche variabili di package o variabili dinamiche.

my($x) definisce una nuova variabile, visibile solo nella subroutine corrente. Ciò viene fatto al momento della compilazione, e dunque si parla di visibilità lessicale o statica. my() opera su variabili private, chiamate anche variabili lessicali o, in modo improprio, variabili con visibilità statica.

Ad esempio:

    sub visibile {
	print "il valore di var e` $var\n";
    }
    sub dinamica {
	local $var = 'locale';	#  nuovo valore temporaneo per la
	visibile();	        #  variabile $var, che resta globale
    }
    sub lessicale {
	my $var = 'privata';    # nouva variabile privata $vatr.
	visible();              # (invisibile al di fuori dello scopo della subroutine)
    }
    $var = 'globale';
    visibile();      		# scrive globale
    dinamica();      		# scrive locale
    lessicale();      		# scrive globale

Si noti come il valore "privata" non venga mai scritto. Ciò perché tale valore di $var è visibile solo all'interno del blocco della funzione lessicale() e non nella subroutine chiamata.

In breve, local() non produce ciò che probabilmente pensate, ossia una variabile privata o locale. local() dà un valore temporaneo ad una variabile globale. my() è ciò che state cercando se desiderate ottenere delle variabili private.

Consultate anche le sezioni perlsub/"Private Variables via my()" ["Variabili Private tramite my()", NdT] e <perlsub/"Temporary Values via local()"> ["Valori Temporanei tramite local()", NdT] per i dolorosi 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