Steffen Beyer > Config-Manager > Config::Manager::Conf

Download:
Config-Manager-1.7.tar.gz

Dependencies

Annotate this POD

View/Report Bugs
Module Version: 1.7   Source  

NAME ^

Config::Manager::Conf - Ich verwalte den Inhalt von Konfigurationsdateien

SYNOPSIS ^

Konfigurationsdaten sind Schluessel-Wert-Paare, die in Abschnitte gegliedert sind. Sie koennen entweder mit

   Config::Manager::Conf->set(section, key, value);

programmatisch gesetzt werden oder mit

   Config::Manager::Conf->add(file1, file2, ...);

aus Konfigurationsdateien eingelesen werden. Sofern die Standarddatei Conf.ini und die dort angegebene Folgedatei(en) eines Bereichs eingelesen werden sollen, reicht statt dessen auch ein

   Config::Manager::Conf->init(scope);

Mit

   Config::Manager::Conf->get(section, key)

werden die gesetzten und/oder eingelesenen Daten ausgelesen.

Alle genannten Operationen funktionieren nicht nur als Klassenmethoden (wie oben angegeben), sondern auch als Instanzmethoden. Das heisst, auch folgende Aufrufe sind moeglich:

   my $conf = Config::Manager::Conf->new();
   $conf->init(scope);
   $conf->set(section, key, value);
   $conf->get(section, key);

Dies ist nuetzlich, wenn man mehrere Konfigurationen innerhalb eines Programms braucht, z.B. um voruebergehend mit einer manipulierten Kopie der Konfiguration zu arbeiten, ohne die Originalkonfiguration zu zerstoeren.

Beispiel fuer eine Konfigurationsdatei:

   # Was mit # beginnt, ist Kommentar. Kommentarzeilen werden genau so
   # ignoriert wie Leerzeilen, daher ...

   # ... beginnt hier der erste Abschnitt:
   [DIRECTORIES]
   # Innerhalb des Abschnitts folgen Schluessel-Wert-Paare:
   ROOT = D:\work
   # Die Variable $ROOT wird durch den oben definierten Wert substituiert:
   TMP = $ROOT\tmp

   # Ein neuer Abschnitt:
   [FILES]
   # Auch Variablen eines anderen Abschnitts sind verfuegbar:
   TMPFILE1 = $[DIRECTORIES]{TMP}\tempfile1.txt
   # Wer unbedingt Anfuehrungszeichen verwenden moechte, bitteschoen:
   TMPFILE2 = "$[DIRECTORIES]{TMP}\tempfile2.txt"

   # Noch ein Abschnitt
   [DIVERSES]
   # Wenn ich ein Dollarzeichen '$' brauche:
   MS = "Micro$$oft"
   # Backslash '\' hat keine Sonderbedeutung:
   SW = Sun\$MS\IBM
   # Wenn ich ein '$' vor einem '$' von einer Substitution brauche:
   BD = $$$[SO]{WHAT}

   # Variablennamen koennen in geschweifte Klammern gesetzt werden,
   # muessen aber (ausser bei Indirektion) nicht:
   MESSAGE1 = Schreibe alles nach $[FILES]TMPFILE1
   MESSAGE2 = Schreibe alles nach $[FILES]{TMPFILE2}

   # Ein Schluessel-Wert-Paar kann durch einen Dollar eingeleitet werden, um
   # sowohl Shell- als auch Perl-Programmierer zufriedenzustellen :-). Der
   # Dollar ist aber ohne Bedeutung, d.h. folgende Zeilen sind gleichwertig:
   $KEY = Value
   KEY = Value

Tritt in mehreren Dateien ein Schluessel im gleichen Abschnitt auf, so gilt der zuerst eingelesene Wert. Anders formuliert, man muss die massgeblichen Dateien zuerst, Dateien mit Default-Einstellungen zuletzt einlesen. Die Methode set() hingegen ueberschreibt auch bestehende Werte.

DESCRIPTION ^

Ich verwalte eine Konfiguration, d.h. den Inhalt einer oder mehrerer Konfigurationsdateien. Eine Konfiguration besteht aus Schluessel-Wert-Paaren, die in Abschnitte (Sections) gegliedert sind.

Ein Wert kann Verweise enthalten auf Schluessel, die anderswo definiert sind (Variablensubstitution). Zyklen in der Definition sind nicht erlaubt; sie werden beim Auswerten erkannt und als Fehler gemeldet.

Eine Konfiguration kann die Information mehrerer Konfigurationsdateien zusammenfassen. Je Datei kann innerhalb eines Abschnitts jeder Schluessel nur einmal vergeben werden, sonst wird beim Lesen der Datei ein Fehler gemeldet. Es ist moeglich, den Schluessel im gleichen Abschnitt mehrerer Dateien zu definieren; dann gilt der Wert aus der zuerst eingelesenen Datei. Die Substitution erfolgt beim ersten Zugriff auf den Wert ("Lazy Evaluation"), daher kann ein Wert abhaengige Werte sowohl in vorangehenden als auch in nachfolgenden Dateien beeinflussen.

Fuer den Aufbau von Konfigurationsdateien gelten folgende Regeln:

ANMERKUNG ^

Diese Klasse ist als geschachtelter Hash implementiert, und zwar hat man je Abschnitt-Schluessel-Paar folgende Eintraege:

   $$self{$section}{$key}{'source'};
   $$self{$section}{$key}{'line'};
   $$self{$section}{$key}{'value'};
   $$self{$section}{$key}{'state'};

Hierbei bedeutet:

   source - Datenquelle (z.B. Dateiname)
   line   - Zeilennummer in der Datei (optional)
   value  - Wert des Schluessels
   state  - Verarbeitungszustand des Wertes:
            'raw'     = Substitution noch nicht durchgefuehrt
            'pending' = Substitution wird gerade durchgefuehrt
            'cached'  = Subsitution wurde erfolgreich durchgefuehrt

Weiterhin enthaelt

   $$self{'<error>'}

die aktuellste Fehlermeldung. Die spitzen Klammern verhindern Konflikte mit Abschnittsnamen (Abschnitte beginnen grundsaetzlich mit einem Buchstaben).

Alle oeffentlichen Methoden sind so ausgelegt, dass sie nicht nur auf einer Instanz, sondern auch auf der Klasse aufgerufen werden koennen; in letzterem Fall wird die Methode auf der Default-Instanz ausgefuehrt.

BEKANNTE FEHLER ^

Diese Klasse ist nicht thread-sicher: Bei der Variablensubstitution muessen Zyklen erkannt werden, und dies funktioniert nicht zuverlaessig, wenn mehrere Threads gleichzeitig eine Variable auswerten.

Es wird immer nur der letzte aufgetretene Fehler gespeichert. Treten mehrere Fehler nacheinander auf, ist nur die jeweils letzte Fehlermeldung abrufbar.

Man erhaelt eine Endlosschleife, wenn in einer Datei eine NEXTCONF-Anweisung direkt oder indirekt auf die Datei selbst verweist.

Doppelte Eintraege innerhalb eines Abschnitts werden nur erkannt, wenn der erste dieser Eintraege tatsaechlich wirksam ist (d.h. nicht durch einen Eintrag in einer frueher eingelesenen Datei verdeckt wird).

DATENSTRUKTUREN ^

OEFFENTLICHE FUNKTIONEN ^

OEFFENTLICHE METHODEN ^

PRIVATE METHODEN ^

PRIVATE FUNKTIONEN ^

SEE ALSO ^

Config::Manager(3), Config::Manager::Base(3), Config::Manager::File(3), Config::Manager::PUser(3), Config::Manager::Report(3), Config::Manager::SendMail(3), Config::Manager::User(3).

VERSION ^

This man page documents "Config::Manager::Conf" version 1.7.

AUTHORS ^

 Steffen Beyer <sb@engelschall.com>
 http://www.engelschall.com/u/sb/download/
 Gerhard Albers

COPYRIGHT ^

 Copyright (c) 2003 by Steffen Beyer & Gerhard Albers.
 All rights reserved.

LICENSE ^

This package is free software; you can use, modify and redistribute it under the same terms as Perl itself, i.e., under the terms of the "Artistic License" or the "GNU General Public License".

Please refer to the files "Artistic.txt" and "GNU_GPL.txt" in this distribution, respectively, for more details!

DISCLAIMER ^

This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the "GNU General Public License" for more details.

syntax highlighting: