DBIx-Wrapper
view release on metacpan or search on metacpan
lib/DBIx/Wrapper.pm view on Meta::CPAN
}
elsif ($char eq '*') {
# multiple line comment
_parse_json_next_char();
while (1) {
unless (defined($char)) {
# error - unterminated comment
last;
}
if ($char eq '*') {
if (defined(_parse_json_next_char()) and $char eq '/') {
_parse_json_next_char();
last;
}
}
else {
_parse_json_next_char();
}
}
next;
}
else {
# error -- syntax error with comment -- can't have '/' by itself
}
}
else {
last;
}
}
}
sub _parse_json_parse_string {
unless ($char eq '"' or $char eq "'") {
warn "bad string at pos $looking_at, char=$char";
return;
}
my $boundary = $char;
my $str = '';
my $start_pos = $looking_at;
while ( defined(_parse_json_next_char()) ) {
if ($char eq $boundary) {
_parse_json_next_char();
return $str;
}
elsif ($char eq '\\') {
_parse_json_next_char();
if (exists($json_escape_map->{$char})) {
$str .= $json_escape_map->{$char};
}
elsif ($char eq 'u') {
my $u = '';
for (1 .. 4) {
_parse_json_next_char();
if ($char !~ /[0-9A-Fa-f]/) {
# error -- bad unicode specifier
if ($json_warn) {
warn "bad unicode specifier at pos $looking_at, char=$char";
}
last;
}
$u .= $char;
}
my $full_char = chr(hex($u));
$str .= $full_char;
}
else {
$str .= $char;
}
}
else {
$str .= $char;
}
}
# error -- unterminated string
warn "unterminated string starting at $start_pos";
}
sub _parse_json_parse_object {
return unless $char eq '{';
my $obj = {};
my $key;
_parse_json_next_char();
_parse_json_eat_whitespace();
if ($char eq '}') {
_parse_json_next_char();
return $obj;
}
while (defined($char)) {
$key = _parse_json_parse_string();
_parse_json_eat_whitespace();
unless ($char eq ':') {
last;
}
_parse_json_next_char();
_parse_json_eat_whitespace();
$obj->{$key} = _parse_json_parse_value();
_parse_json_eat_whitespace();
if ($char eq '}') {
_parse_json_next_char();
return $obj;
}
elsif ($char eq ',') {
_parse_json_next_char();
_parse_json_eat_whitespace();
}
else {
last;
}
}
( run in 0.659 second using v1.01-cache-2.11-cpan-39bf76dae61 )