Questo problema è stato risolto nel perl 5.004_05, dunque prevenirlo significa
aggiornare la vostra versione di perl. ;)
Il suicidio di variabile si ha quando (temporaneamente o permanentemente) si
perde il valore di una variabile. È causato da questioni di
visibilità frutto dell'interazione tra my() e local() o con le
chiusure o con variabili che sono iteratori alias per foreach() e con
argomenti di subroutine. Di solito era facile perdere inavvertitamente il
valore di una variabile in questa modo, ora però è più
difficile. Prendete questo codice:
my $f = 'pippo';
sub T {
while ($i++ < 3) { my $f = $f; $f .= 'pluto'; print $f, "\n" }
}
T;
print "Infine $f\n";
Se state avendo a che fare con il suicidio di variabile, quel my $f nella subroutine
non tira su una nuova copia di $f, il cui valore è pippo. L'output
mostra che all'interno della subroutine, il valore di $f oltrepassa i limiti
quando non dovrebbe, come in questo output:
pippopluto
pippoplutopluto
pippoplutoplutopluto
Infine pippo
La $f a cui è stato aggiunto "pluto" per tre volte dovrebbe essere una
nuova $f. my $f dovrebbe creare una nuova variabile locale ogni volta che
si compie il ciclo. L'output che ci si aspetta è:
pippopluto
pippopluto
pippopluto
Infine pippo
|