Leser: 21
1
2
3
4
navi_liste[0][id]=navi_item_10&
navi_liste[1][id]=navi_item_11&
navi_liste[1][children][0][id]=navi_item_12&
...
1
2
3
4
5
$VAR1 = {
'navi_liste[0][children][0][children][0][id]' => 'navi_item_12',
'navi_liste[1][id]' => 'navi_item_13',
...
};
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 39 40 41 42 43 44 45 46
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %hash=( 'navi_liste[0][children][0][children][0][id]' => 'navi_item_12', 'navi_liste[0][children][0][children][1][id]' => 'navi_item_09', 'navi_liste[0][children][0][children][2][id]' => 'navi_item_08', 'navi_liste[0][children][0][children][3][id]' => 'navi_item_07', 'navi_liste[0][children][1][id]' => 'navi_item_11', 'navi_liste[0][children][2][id]' => 'navi_item_10', 'navi_liste[1][id]' => 'navi_item_13', 'navi_liste[2][id]' => 'navi_item_14', ); my %final=reformat_tree(%hash); print Dumper(\%final); sub reformat_tree { my %hash=@_; my %return; while(my ($key,$value)=each(%hash)) { my @names=('unknown'); @names=($1) if($key=~s/^(.+?)\[//s); $key=~s/\]$//s; push(@names, split(/\]\[/,$key)); my $ref=\\%return; for(@names) { if(/^\d+$/) { $ref=\$$ref->[$_]; } else { $ref=\$$ref->{$_}; } } $$$ref=$value; } return %return; }