Autovivification — c'est la création automatique de structures imbriquées lors de l'accès à des parties inexistantes de hachages ou de tableaux. Si vous accédez à un élément inexistant, Perl "crée" lui-même des éléments intermédiaires.
Par exemple :
my %tree; $tree{ branch }{ leaf } = 'green'; # %tree contient maintenant : { branch => { leaf => 'green' } }
Avantages :
Inconvénients :
Le fragment de code suivant créera-t-il une structure dans un hachage ? Pourquoi ?
my %d; print exists $d{a}{b};
Réponse : Oui, lors de cet accès, l'autovivification se produit : $d{a} deviendra automatiquement une référence sur un hachage vide, même si exists ne trouve rien.
Histoire
Dans un projet, nous vérifions l'existence d'un chemin dans une structure complexe :
if (exists $data{user}{profile}{email}) { ... }Même si la structure n'existait pas, cette vérification entraînait la création de
$data{user}et$data{user}{profile}— des éléments "vides" apparaissaient dans la base, encombrant le stockage.
Histoire
En essayant de parcourir des nœuds inexistants dans un hachage imbriqué, des hachages imbriqués complètement inattendus commençaient à apparaître dans la structure. Cela rendait difficile la distinction entre l'absence de données et les valeurs par défaut.
Histoire
Un développeur a utilisé l'autovivification pour tenir compte d'objets imbriqués, sans contrôler le processus. Au fil du temps, la structure a "gonflé" jusqu'à des centaines d'éléments intermédiaires vides, ce qui a eu un impact négatif sur les performances et a compliqué le débogage : il est devenu flou où il y avait réellement des données et où cela était apparu "au passage".