Autovivifikation ist die automatische Erstellung von verschachtelten Strukturen beim Zugreifen auf nicht existierende Teile von Hashes oder Arrays. Wenn Sie auf ein nicht existierendes Element zugreifen, erstellt Perl automatisch die Zwischenelemente.
Zum Beispiel:
my %tree; $tree{ branch }{ leaf } = 'green'; # %tree enthält jetzt: { branch => { leaf => 'green' } }
Vorteile:
Nachteile:
Wird der folgende Codeabschnitt eine Struktur im Hash erstellen? Warum?
my %d; print exists $d{a}{b};
Antwort: Ja, beim Zugriff geschieht eine Autovivifikation: $d{a} wird automatisch ein Verweis auf einen leeren Hash, selbst wenn exists nichts findet.
Geschichte
In einem Projekt wurde das Vorhandensein eines Pfades in einer komplexen Struktur überprüft:
if (exists $data{user}{profile}{email}) { ... }Selbst wenn die Struktur nicht existierte, führte diese Überprüfung zur Erstellung von
$data{user}und$data{user}{profile}— in der Datenbank erschienen "leere" Elemente, die das Speichersystem verstopften.
Geschichte
Bei dem Versuch, durch nicht existierende Knoten in einem verschachtelten Hash zu iterieren, begannen in der Struktur völlig unerwartete verschachtelte Hashes zu erscheinen. Dies erschwerte es, das Fehlen von Daten von Standardwerten zu unterscheiden.
Geschichte
Ein Entwickler führte die Nachverfolgung von verschachtelten Objekten durch Autovivifikation ein, ohne den Prozess zu kontrollieren. Mit der Zeit "wuchs" die Struktur auf Hunderte von leeren Zwischenelementen, was sich negativ auf die Leistung auswirkte und das Debugging erschwerte: Es wurde unklar, wo tatsächlich Daten vorhanden waren und wo sie "unterwegs" entstanden waren.