1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $data='{key1={key11=value11} | key2 = value2 | key3 = {key31=value31 | key32 = value32 | key33 = {key331=value331|key332={key3321=value3321|key3322=value3322|key3321=value3322}|key333=value333|key334=value334}}}';
package BNF;
sub encode($)
{
my $data=shift(@_);
my $rcu;
$rcu=sub
{
my $ref;
if($data=~s/^\s*\{//s)
{
$ref={};
while(index($data,'}')!=0)
{
$data=~s/^[\|\s]*(.+?)\s*=//s;
my $n=$1;
$ref->{$n}=$rcu->();
}
$data=~s/^}//;
}
else
{
$data=~s/^\s*(.+?)\s*(\||\})/$2/s;
$ref=$1;
}
return $ref;
};
return $rcu->();
}
package main;
print Dumper(BNF::encode($data))."\n";
Und was funktioniert nicht?