Helmut Weber: modularer variablenpool

Beitrag lesen

Hallo Bjoern,

vielen Dank für die Antwort. Habe jetzt dazu einige Fragen:

config/default.cfg:
$variable1  = 'wert';
$variable2  = 5;
...
-->> an welcher Stelle im Dateibaum muss diese Datei abgelegt
werden ? Unterverzeichnis Config unter perl\site\lib  ?
Oder wird hier die config.pm angesprochen unter perl\lib ?

default.cfg ist in meinem Beispiel eine normale Textdatei, die Du entweder mit dem absoluten Pfad des Dateisystems oder dem relativen Pfad vom Skript aus einbinden kannst.

In meinen Skripten binde ich diese Datei wie folgt ein:
{ package Config; do 'config/default.cfg' }

In meinen Skripten kann ich dann über $Config::db_variable1 auf die gewünschte Variable zugreifen. Die Methode funktioniert auch mit use strict;.
-->>was bedeutet hier jetzt "$Config::db_variable1" ?
Speziell "db_". Oben hattest Du als Beispiel $variable1 genannt.
Wie spreche ich diese an ?

Entschuldigung, dass war ein Tippfehler! Es muss natürlich heißen: "$Config::variable1".
Mittels dem Befehl "package" wechsele ich in einen anderen Namensraum (in diesem Beispiel "Config"). Im Geltungsbereich dieses Namensraums führe ich nun die die Datei "config/default.cfg" aus. In dieser Datei habe ich nur ganz normale Variablen abgelegt. Es könnten aber auch Berechnungen oder ganze Funktionen in dieser Datei vorhanden sein.
Um in meinem Skript nun eine Variable aus dieser Datei anzusprechen, muss ich den dazugehörigen Namesraum angeben "$Config::variable1". Gibst Du keinen Namensraum an, geht Perl immer davon aus, dass Du den $main-Namensraum meinst. Anstatt also "$variable1" kannst Du auch "$main::variable1" schreiben.

Allerdings wird im Hauptprogram die
gewünschte Variable nochmals explizit mit :
-> my $var = $Config::test1; definiert.

Ich möchte jedoch die Variable NUR DEKLARIEREN, jedoch noch keinen
Wert zuweisen !!!!!.

Da es sich in meinem Beispiel um gewöhliche Variablen handelt, brauchst Du diesen auch keinen Wert zuweisen. Da es sich dabei aber um Variablen handelt, die in allen Skripten gültig sein sollen, macht es keinen Sinn Variablen extern zu deklarieren und diese dann im Skript mit Werten zu füllen. Dazu sind lokale Variablen besser geeignet. Aber evtl. verstehe ich deinen Anwendugsfall noch nicht ganz genau!

Wie gesagt, mit meiner Methode kannst Du nur eine Datei in deine Skripte einbinden, in der Du Variablen und Werte ablegst, die für alle Skripte gültig sind. Also eine globale Konfigurationsdatei! Wenn Du in einem Skript den Wert einer Variable änderst, bekommen die anderen Skripte diese Änderung nicht mit!

Gruß
Helmut Weber

--
-------------------------------------------
Mode ist eine Variable, Stil eine Konstante