Was benutzt Ihr zum Schreiben und Einlesen von programm-spezifischen
Konfigurationsdateien?
Bei mir geht es im wesentlichen darum, eine Perl-Datenstruktur in eine
Konfigurationsdatei zu speichern.
Ich habe mir YAML angeschaut und auf den ersten Blick sah es ganz
gut aus. Dabei benutze ich nur die Funktionalität ähnlich Data::Dumper
um die Daten zu schreiben und wieder einzulesen. Mehr interessiert mich
zur Zeit nicht. Das Schreiben von Perl-Code ist wohl im Allgemeinen
keine gute Idee - daher YAML.
Jedoch ist es so, dass YAML von ihm geschriebene Dateien nicht
wieder einlesen kann (Problem scheinen einfache Einführungszeichen
zu sein), was ich nicht so überzeugend finde.
Oliver
Bunte Mischung: XML, YAML, Selbstgeschriebenes ... Je nachdem, was mir
beim Schreiben des Programms gerade sinnvoll erschien.
> Bei mir geht es im wesentlichen darum, eine Perl-Datenstruktur in eine
> Konfigurationsdatei zu speichern.
>
> Ich habe mir YAML angeschaut und auf den ersten Blick sah es ganz
> gut aus. Dabei benutze ich nur die Funktionalit�t �hnlich Data::Dumper
> um die Daten zu schreiben und wieder einzulesen. Mehr interessiert mich
> zur Zeit nicht. Das Schreiben von Perl-Code ist wohl im Allgemeinen
> keine gute Idee - daher YAML.
>
> Jedoch ist es so, dass YAML von ihm geschriebene Dateien nicht
> wieder einlesen kann (Problem scheinen einfache Einf�hrungszeichen
> zu sein), was ich nicht so �berzeugend finde.
Kann ich nicht nachvollziehen:
#!/usr/bin/perl
use warnings;
use strict;
use Test::More tests => 1;
use YAML;
my $d1 = {
v1 => "a'b",
"O'Key" => "neve'mo'e",
};
my $s = Dump($d1);
my $d2 = Load($s);
is_deeply($d2, $d1);
__END__
1..1
ok 1
Allerdings gibt es mehrere Implementationen von YAML. Welche verwendest
Du denn? Ich habe hier nur die pure-perl Implementation, was f�r
Config-Files von ein paar Zeilen ausreichend ist. F�r gr��ere
Datenstrukturen w�rde ich vermutlich zu YAML::Syck greifen.
hp
> Kann ich nicht nachvollziehen:
[...]
Vielleicht hiermit:
#!/usr/bin/perl
use strict;
use warnings;
use YAML;
my %myhash = ( "foo" =>
[
{
"First - erstes" => 1,
"Second - zweites" => 2,
"Third - drittes" => 3
}
]
);
my $s=Dump(%myhash);
print $s;
my %myhash2 = Load($s);
ojo@hermes:~/Dokumente/Projekte/tkscan2pdf$ ./testyaml.pl
--- foo
---
- 'First - erstes': 1
'Second - zweites': 2
'Third - drittes': 3
YAML Error: Inconsistent indentation level
Code: YAML_PARSE_ERR_INCONSISTENT_INDENTATION
Line: 4
Document: 2
at /usr/share/perl5/YAML.pm line 33
Abhilfe: Leerzeichen nach dem 'First -' löschen.
Oliver
>> Kann ich nicht nachvollziehen:
> [...]
>
> Vielleicht hiermit:
>
> #!/usr/bin/perl
>
> use strict;
> use warnings;
> use YAML;
>
> my %myhash = ( "foo" =>
> [
> {
> "First - erstes" => 1,
> "Second - zweites" => 2,
> "Third - drittes" => 3
> }
> ]
> );
[...]
> Abhilfe: Leerzeichen nach dem 'First -' l嚙編chen.
>
Ja, damit geht's. Da Du aber geschrieben hast "Problem scheinen einfache
Einf嚙篁rungszeichen zu sein", hat mein Testcase einzelne
Anf嚙篁rungszeichen enthalten und nicht die problematische Sequenz "- ".
Nach ein bisschen mehr herumspielen: Das Problem scheint zu sein, dass
sich der YAML-Parser durch in Keys eingebettete Steuerungssequenzen
irritieren l嚙編st: "- " im Key geht also nicht (es sei denn, es ist der
letzte Key - so ganz klar ist mir nicht, wie das zustandekommt, aber den
Code selbst habe ich mir noch nicht angesehen). Das ist IMHO ein klarer
Bug, vermutlich der gleiche wie in
http://rt.cpan.org/Public/Bug/Display.html?id=42015
Hmm, 68 offene Bugs, darunter:
#29677: Metabug: RT queue too full
Schaut nicht sonderlich gut maintained aus ...
hp