7 use Text::Balanced qw/extract_bracketed/;
9 open my $hash_t, '<', 't/20-hash.t';
10 open my $array_t, '>', 't/21-array.t';
12 sub num { ord($_[0]) - ord('a') }
16 return $h unless $h and ref $h eq 'HASH';
19 $array[num($_)] = hash2array($h->{$_});
26 return 'undef' unless defined $a;
27 return $a unless ref $a;
28 die "Invalid argument" unless ref $a eq 'ARRAY';
29 return '[ ' . join(', ', map dump_array($_), @$a) . ' ]';
32 sub extract ($) { extract_bracketed $_[0], '{', qr/.*?(?<!\\)(?:\\\\)*(?={)/ }
40 s{s/\^\$/%/}{s/^\$/@/};
43 s!->{([a-z])}!'->[' . num($1) . ']'!eg;
46 my ($bracket, $prefix);
47 while (do { ($bracket, $suffix, $prefix) = extract($suffix); $bracket }) {
48 $buf .= $prefix . dump_array(hash2array(eval $bracket));
52 print $array_t "$buf\n";