hotti: tied hash Config::IniFiles

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

--
Spanferkel sterben nicht als Schweine.
  1. 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;  
    	  
    }