tied hash Config::IniFiles
hotti
- perl
0 hotti
hi,
mit dem i. Thema genannten Modul binde ich einen hash an eine INI-Datei wie folgt:
tie %vars, 'Config::IniFiles', ( -file => "$$cfg{path}{dbdir}/public.ini" );
füge im Script einige Werte zu %vars hinzu und schreibe dann %vars zurück in die Datei:
tied( %vars )->WriteConfig( "$$cfg{path}{dbdir}/public.ini" ) || return;
Die INI-Datei sieht so aus:
[/eifel.html]
descr=In Deutschland Urlaub machen...
time=1250366573
title=Urlaub 2006 im Lenzenhaus (Eifel)
ordner=Intern.Urlaub
usw., aber wenn eine Sektion [] hinzukommt, fehlen da nach dem ersten Durchlauf Parameter, z.B. fehlt der Parameter 'ordner' (in anderen Fällen fehlt der Parameter 'time'). Komplett ist die INI jedoch immer nach einem zweiten Durchlauf meines Scripts. Hat jemand ne Idee was da geht, bzw. nicht geht?
Hotti
hi,
vermutlich funktioniert das Locken der Datei nicht richtig, so dass es Race-Conditions gibt. Mein Workaround sieht so aus:
sub wri{
untie(%cont) || return(); # Content in DB_File
# Kopie der public.ini anlegen
open (OUT, ">$$cfg{path}{dbdir}/public.tmp") || return;
foreach my $url(keys %{$pub}){
print OUT "[$url]\n";
foreach my $p(keys %{$$pub{$url}}){
print OUT "$p=$$pub{$url}{$p}\n";
}
print OUT "\n";
}
close OUT;
untie(%{$pub}) || return;
# Kopie zurückschreiben
require File::Copy;
File::Copy::copy("$$cfg{path}{dbdir}/public.tmp", "$$cfg{path}{dbdir}/public.ini");
return "Written";
# fehlerhaft, manche Parameter fehlen
# tied( %{$pub} )->WriteConfig( "$$cfg{path}{dbdir}/public.ini" ) || return;
}