+sub extract ($$) {
+ extract_bracketed $_[0], $_[1], qr/.*?(?<![\\@%])(?:\\\\)*(?=$_[1])/
+}
+
+sub convert_testcase ($$) {
+ local $_ = $_[0];
+ my $fast = $_[1];
+
+ s!(\ba\b)?(\s*)HASH\b!($1 ? 'an': '') . "$2ARRAY"!eg;
+ s{
+ [\{\[]\s*(['"]?[a-z]['"]?(?:\s*,\s*['"]?[a-z]['"]?)*)\s*[\}\]]
+ }{
+ '[' . join(', ', map { my $n = num($_); $fast ? $n : "\$N[$n]" }
+ split /\s*,\s*/, $1) . ']'
+ }gex;
+ s!%(\{?)\$!\@$1\$!g;
+
+ my $buf;
+ my $suffix = $_;
+ my ($bracket, $prefix);
+ while (do { ($bracket, $suffix, $prefix) = extract($suffix, '{'); $bracket }) {
+ my $array = dump_array(hash2array(eval $bracket));
+ $buf .= $prefix . $array;
+ }
+ $buf .= $suffix;
+ $buf =~ s/\s+/ /g;
+ $buf =~ s/\s+$//;
+
+ return "$buf\n";
+}