aggiungerò un esempio veloce.
$var = "Global";
sub inner {
print "inner: $var\n";
}
sub changelocal {
my $var = "Local";
print "changelocal: $var\n";
&inner
}
sub changedynamic {
local $var = "Dynamic";
print "changedynamic: $var\n";
&inner
}
&inner
&changelocal
&changedynamic
Fornisce il seguente risultato (commenti aggiunti).
inner: Global # Finds the global variable.
changedynamic: DynamiC# Dynamic variable overrides global.
inner: DynamiC# Find dynamic variable now.
changelocal: Local # Local variable overrides global.
inner: Global # The local variable is not in scope so global is found.
Si può pensare a una variabile dinamica come a un modo per mascherare un globale per le funzioni chiamate. Dove le variabili con ambito lessicale sono visibili solo dal codice all'interno delle parentesi graffe più vicine.
fonte
2014-05-03 14:51:41
Grazie mille – Anil
"my ($ x) crea una nuova variabile che è visibile solo nella subroutine corrente". Quello non è vero. 'my' crea una nuova variabile che è visibile solo nell'attuale * blocco di codice *. Una subroutine è solo un esempio di un blocco. Si commette un errore simile nella definizione di 'local'. –
@ O.D http://perldoc.perl.org/perlsyn.html#Basic-BLOCKs – TLP