Autovivificazione è la creazione automatica di strutture nidificate quando si accede a parti non esistenti di hash o array. Se si accede a un elemento che non esiste, Perl "crea" da solo elementi intermedi.
Ad esempio:
my %tree; $tree{ branch }{ leaf } = 'green'; # %tree ora contiene: { branch => { leaf => 'green' } }
Pro:
Contro:
Creerà il seguente frammento di codice una struttura nell'hash? Perché?
my %d; print exists $d{a}{b};
Risposta: Sì, in questo caso avviene l'autovivificazione: $d{a} diventerà automaticamente un riferimento a un hash vuoto, anche se exists non trova nulla.
Storia
In un progetto si controllava l'esistenza di un percorso in una struttura complessa:
if (exists $data{user}{profile}{email}) { ... }Anche se la struttura non esisteva, questa verifica portava alla creazione di
$data{user}e$data{user}{profile}— nel database apparivano elementi "vuoti", riempiendo lo storage.
Storia
Nel tentativo di attraversare nodi non esistenti in un hash nidificato, nella struttura iniziavano a comparire hash nidificati completamente inattesi. Questo complicava la distinzione tra l'assenza di dati e i valori di default.
Storia
Un sviluppatore ha registrato oggetti nidificati tramite autovivificazione, senza controllare il processo. Col passare del tempo, la struttura è "cresciuta" fino a centinaia di elementi intermedi vuoti, il che ha influenzato negativamente le prestazioni e ha complicato il debug: non era chiaro dove ci fossero realmente dati e dove fossero apparsi "a posteriori".