L'utilizzo di local
su una variabile indica che il suo stato precedente deve essere inserito in una pila da qualche parte e ripristinato di nuovo quando viene chiuso l'ambito locale. L'utilizzo di my
su una variabile crea semplicemente una variabile completamente nuova che ombreggia la variabile precedente con lo stesso nome: la precedente è interamente non modificata e non deve essere salvata da nessuna parte. È semplicemente in agguato quando si esce dall'ambito locale ed è di nuovo visibile.
Questo push/popping a una pila richiede risorse; c'è un sacco di lavoro sotto il cofano per garantire che funzioni correttamente. (Considera casi come un'eccezione generata durante l'ambito locale o un gestore di segnali in esecuzione. Sono sicuro che tu possa pensare di più.)
Oltre ad essere più efficiente, l'utilizzo di my
è molto più logico. Come programmatore che introduce una variabile locale $ pippo, non devi preoccuparti della ragione semantica per la precedente versione di $ pippo, quali dati potrebbero esserci già, o anche se ci fosse un $ pippo già creato. Se in qualche momento lungo la strada viene rimossa la dichiarazione precedente di $ pippo, il codice local $foo
si interromperà, ma my $foo
sarà perfettamente felice. Sii un buon programmatore e mantieni il tuo codice in pezzi ben incapsulati, il che significa usare l'ambito lessicale il più possibile. È abbastanza possibile scrivere una grande applicazione e non è mai necessario avere variabili del pacchetto/ambito globale, specialmente quando si utilizzano classi OO ben progettate.
Essere un * eroe * locale - provare a leggere * il mio * codice. –
Non utilizzare locale vs. mio perché uno è più veloce dell'altro; usa ciò che è più corretto per ciò che vuoi ottenere (di solito il mio). – ysth
In altre parole: non contare solo il tempo impiegato da un programma per eseguire, ma soprattutto contare il tempo che impiega un programmatore per eseguire il debug e correggerlo. Il programmatore è molto più costoso del computer che esegue il programma. – reinierpost