Autovivificación es la creación automática de estructuras anidadas al acceder a partes no existentes de hashes o arrays. Si accedes a un elemento que no existe, Perl "crea" automáticamente elementos intermedios.
Por ejemplo:
my %tree; $tree{ branch }{ leaf } = 'green'; # %tree ahora contiene: { branch => { leaf => 'green' } }
Ventajas:
Desventajas:
¿Creará el siguiente fragmento de código una estructura en el hash? ¿Por qué?
my %d; print exists $d{a}{b};
Respuesta: Sí, al hacer este acceso se produce la autovivificación: $d{a} automáticamente se convertirá en una referencia a un hash vacío, incluso si exists no encuentra nada.
Historia
En un proyecto se verificaba la existencia de una ruta en una estructura compleja:
if (exists $data{user}{profile}{email}) { ... }Aunque la estructura no existía, esta verificación llevaba a la creación de
$data{user}y$data{user}{profile}— se añadían elementos "vacíos" en la base, ensuciando el almacenamiento.
Historia
Al intentar recorrer nodos inexistentes en un hash anidado, comenzaban a aparecer hashes anidados completamente inesperados en la estructura. Esto dificultaba distinguir la ausencia de datos de los valores por defecto.
Historia
Un desarrollador empezó a registrar los objetos anidados a través de la autovivificación, sin controlar el proceso. Con el tiempo, la estructura "creció" hasta cientos de elementos intermedios vacíos, lo que afectó negativamente al rendimiento y complicó la depuración: se volvió confuso dónde realmente había datos y dónde aparecieron "sobre la marcha".