Perl Variablen aus externem File

Tiberian

New Member
Hallo zusammen,

ich bin auf der Suche nach einer Möglichkeit, mittels Perl Variablen aus einer Datei zu lesen und diese dann als lokale Variablen verwenden zu können. Es geht dabei darum, Webspaces für User anzulegen und wieder löschen zu können.

Zum Einsatz kommt Config::Simple, und die Variablen werden als "ini-Style" gespeichert. Hier mal ein Beispiel:

Code:
filesdir="files"
logdir="log"
cgibindir="cgi-bin"
errordir="errordocs"

userpath="$webpath/$username"

Wie ihr seht wird in Variablen selbst nochmal eine andere Variable verwendet, ob ich das so umsetzen kann sehe ich dann.

Als Code bastele ich momentan an folgender Lösung:

Code:
#!/usr/bin/perl
use Config::Simple;
# Alle Variablen aus Datei in Hash speichern
my $cfg = Config::Simple->import_from('config.ini', \my %Config);

foreach my $k (keys %Config) {
    print "$k => $Config{$k}\n";
    # default. aus Namespace der .ini abschneiden
    my $scalar = ( split '\.', $k )[-1];
    print("test1 ".$scalar."\n");
    # Variable exportieren
    $zeile =~ s/$scalar/\$$scalar/gis;
    print "Zeile ".$zeile."\n\n";
}

print("\n\nHallo ".$defaultowner."\n");

Ausgabe schaut so aus:
Code:
default.privdir => private
duda privdir
Zeile 

default.filesdir => files
duda filesdir
Zeile 

default.ssldir => ssl
duda ssldir
Zeile 

default.logdir => logs
duda logdir
Zeile 

default.svndomainpath => $webpath/$username/$svndir/$domain
duda svndomainpath
Zeile

Nur das funktioniert nicht wirklich. Hat von euch einer ne Idee oder hat das schonmal so umgesetzt und kann mir nen Tipp geben.

Danke

Grüße
Tiberian
 
Die ini-Datei passt nicht zur Ausgabe... ;)

$zeile =~ s/$scalar/\$$scalar/gis;
Ich denke der Haken ist hier. Zum Einen wird es nicht evaluiert, zum andern nicht korrekt überprüft.
Außerdem prüfst Du $scalar, welcher doch ein Teil des Keys ist und nicht den Value den Du eigentlich prüfen möchtest.
Anstelle dieser Zeile folgendes:
Code:
while ($Config{$k} =~ /\$([\w_]+)/) {
    my $var = $1;
    $Config{$var} = '' if (!defined $Config{$var})
    $Config{$k} =~ s/\$$var/$Config{$var}/g;
}
Ich hab hier ein implizites definieren von vorher nicht vorhandenen Variablen eingesetzt um einen Fehlerfall abzufangen.

huschi.
 
Back
Top