Alexander (HH): Perlmodul als Configfile automatisch schreiben

Beitrag lesen

Moin Moin!

Mein Idee nun verwendet ein Modul, dessen Inhalt ein Hash ist.
Das Modul soll standardmässig mit use eingebunden werden.

Ich möchte damit einen standardmässig schnellen Datenzugriff,
statt langsames Einlesen von Userkonfigurationen,
welche zudem Fehler enthalten könnten, erreichen.

Irgendwann wird jemand die Konfiguration manuell ändern müssen, da ist dann ein bekanntes, einfaches Format meistens weniger anfällig als ein Modul, das als Perl-Code geparst wird.

Das Windows-INI-Format kann wesentlich entspannter gelesen werden. JSON ist auch recht schmerzfrei und mit JSON::XS rattenschnell, YAML hat AFAIK einige lästige Begrenzungen. XML ist Overkill, insbesondere beim Parsen, und kann auch nicht mehr Struktur abbilden als JSON.

JSON und INI sind schnell und schmerzfrei gelesen, der Perl-Start dauert wesentlich länger.

Ist es nun notwendig, dass eine Basiskonfiguration erstellt wird [1]
( dazu gehören
  --erfasse das verfügbare Filesystem, und die Files
  --erfasse eine eventuell vorliegende Userkonfiguration
)
... so soll eine Scriptroutine das Perlmodul schreiben.
Das setzt voraus, dass ich natürlich das Modul als print Text beschreiben
kann, während es via use eingebunden ist.

Das geht problemlos. use X ist equivalent zu BEGIN { require X; X->import(); }, wobei require die Datei auf einen Schlag einliest. Wenn das Modul dann abgearbeitet wird, ist die Datei beschreibbar.

Beim nächsten Script-Run würde dann aus dem Modul ein aktualisierter Hash eingelesen, der die aktualiserte gültige Konfiguration darstellt.

Warum so umständlich?

Starte das Script, suche nach Updates, installiere Updates, aktualisiere die Konfiguration, starte die eigentlich angeforderte Aufgabe. Das geht in einem Programmlauf.

Wenn Du eine Grundkonfiguration und eine User-Konfiguration haben willst, benutze zwei Konfigurationsdateien: Eine, sagen wir mal system.ini, fängt mit der dicken fetten Warnung an, in der Datei nicht herumzupfuschen, die zweite, user.ini, ist anfänglich leer. Die system.ini wird zuerst gelesen und legt die Defaults fest, die user.ini überschreibt dann die selbe Datenstruktur mit den Werten, die der User gerne hätte. Updates manipulieren dann nur die system.ini. (Außer bei wirklich üblen Fehlerfällen, wo ein Eintrag aus der user.ini gelöscht werden muß.)

Wenn Du ohnehin eine SQL-DB benutzt, kannst Du die Konfiguration natürlich auch in eine DB-Tabelle schreiben, und Du brauchst nur eine Mini-Datei, die die Verbindung zur DB beschreibt (DBI-Connect-String, User-Name, Passwort).

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".