Ich bin mir noch nicht ganz sicher ob ich INI nicht die irgendwie nach json "compiliere"
Compilieren ja, aber JSON ist auch nicht performanter im Serialisieren. Wenn Du was wirklich Schnelles haben willst, serialisiere byteorientiert auf Low-Level. Mit untenstehendem Algorithmus (den ich auch irgendwo in PHP habe) liest mein FW den gesamten Content (derzeit ca. 300 Einzelseiten) aus einer Bytesequenz mit ca. 1 MB, das geht ratz fatz. Die Datenstruktur ist nach dem Muster Entity-Attribute-Value, was genauso auch zu einer ini-Datei passt.
Evntl. sparst Du Dir aber auch den Umweg über die ini und baust Dir gleich ein Backend für die Binary.
package EAVHandle;
use strict;
use warnings;
sub handle2eav{
my $pkg = shift;
my $fh = shift;
seek $fh,0,0;
my %eav = ();
while( read($fh, my $buffer, 12)){
my($elen, $alen, $vlen) = unpack "NNN", $buffer;
read($fh, my $ent, $elen);
read($fh, my $att, $alen);
read($fh, my $val, $vlen);
$eav{$ent}{$att} = $val;
}
return \%eav;
}
sub eav2str{
my $pkg = shift;
my $ref = shift;
my $CONTENT = '';
foreach my $ent(keys %{$ref}){
foreach my $att(sort {$b cmp $a} keys %{$ref->{$ent}}){
my $val = $ref->{$ent}{$att} || '';
$CONTENT .= pack("NNN", length $ent, length $att, length $val).$ent.$att.$val;
}
}
return $CONTENT;
}
sub eav2handle{
my $pkg = shift;
my $ref = shift;
my $fh = shift;
seek($fh,0,0);
truncate($fh,0);
foreach my $ent(keys %{$ref}){
foreach my $att(sort {$b cmp $a} keys %{$ref->{$ent}}){
my $val = $ref->{$ent}{$att} || '';
$fh->print( pack("NNN", length $ent, length $att, length $val).$ent.$att.$val );
}
}
}
1;