#!/usr/bin/env perl
# -*- mode: cperl; indent-tabs-mode: nil; tab-width: 3; cperl-indent-level: 3; -*-
BEGIN { $| = 1 ; }
use strict;
use warnings;
use utf8;
use Data:: Dumper ;
use JSON:: SL ;
my $p = JSON:: SL -> new ;
$p -> utf8 ( 1 ) ;
$p -> noqstr ( 1 ) ;
$p -> nopath ( 1 ) ;
$p -> set_jsonpointer ( [ '/^' ] ) ;
my $buf = <<JSON;
[{"id": "hello"}]
JSON
$p -> feed ( $buf ) ;
while ( my $obj = $p -> fetch ) {
my %val = % { $obj -> { Value} } ;
# This prints: id => hello
print "$k => $val{$k}\n " ; # This prints: $VAR1 = 'id';
if ( $k eq 'id' ) {
# This triggers: Use of uninitialized value $val{"id"}
# So, id != id ?
print "id => $val{id}\n " ; }
}
# Now for the fun bit: This causes 2 rows of key id
$val { 'id' } = 5 ;
print "$k => $val{$k}\n " ; }
}
=pod
id => hello
$VAR1 = 'id';
Use of uninitialized value $val{"id"} in concatenation (.) or string at /home/tino/parsers/bin/json_sl.pl line 32.
id =>
id => hello
$VAR1 = 'id';
id => 5
$VAR1 = 'id';
=cut
IyEvdXNyL2Jpbi9lbnYgcGVybAojIC0qLSBtb2RlOiBjcGVybDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyB0YWItd2lkdGg6IDM7IGNwZXJsLWluZGVudC1sZXZlbDogMzsgLSotCkJFR0lOIHsgJHw9MTsgfQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4Owp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgSlNPTjo6U0w7CgpteSAkcCA9IEpTT046OlNMLT5uZXc7CiRwLT51dGY4KDEpOwokcC0+bm9xc3RyKDEpOwokcC0+bm9wYXRoKDEpOwokcC0+c2V0X2pzb25wb2ludGVyKFsnL14nXSk7CgpteSAkYnVmID0gPDxKU09OOwpbeyJpZCI6ICJoZWxsbyJ9XQpKU09OCgokcC0+ZmVlZCgkYnVmKTsKd2hpbGUgKG15ICRvYmogPSAkcC0+ZmV0Y2gpIHsKICAgbXkgJXZhbCA9ICV7JG9iai0+e1ZhbHVlfX07CgogICBmb3JlYWNoIG15ICRrIChzb3J0IGtleXMgJXZhbCkgewogICAgICAjIFRoaXMgcHJpbnRzOiBpZCA9PiBoZWxsbwogICAgICBwcmludCAiJGsgPT4gJHZhbHska31cbiI7CiAgICAgICMgVGhpcyBwcmludHM6ICRWQVIxID0gJ2lkJzsKICAgICAgcHJpbnQgRHVtcGVyKCRrKTsKICAgICAgaWYgKCRrIGVxICdpZCcpIHsKICAgICAgICAgIyBUaGlzIHRyaWdnZXJzOiBVc2Ugb2YgdW5pbml0aWFsaXplZCB2YWx1ZSAkdmFseyJpZCJ9CiAgICAgICAgICMgU28sIGlkICE9IGlkID8KICAgICAgICAgcHJpbnQgImlkID0+ICR2YWx7aWR9XG4iOwogICAgICB9CiAgIH0KICAgcHJpbnQgIlxuIjsKCiAgICMgTm93IGZvciB0aGUgZnVuIGJpdDogVGhpcyBjYXVzZXMgMiByb3dzIG9mIGtleSBpZAogICAkdmFseydpZCd9ID0gNTsKICAgZm9yZWFjaCBteSAkayAoc29ydCBrZXlzICV2YWwpIHsKICAgICAgcHJpbnQgIiRrID0+ICR2YWx7JGt9XG4iOwogICAgICBwcmludCBEdW1wZXIoJGspOwogICB9Cn0KCj1wb2QKaWQgPT4gaGVsbG8KJFZBUjEgPSAnaWQnOwpVc2Ugb2YgdW5pbml0aWFsaXplZCB2YWx1ZSAkdmFseyJpZCJ9IGluIGNvbmNhdGVuYXRpb24gKC4pIG9yIHN0cmluZyBhdCAvaG9tZS90aW5vL3BhcnNlcnMvYmluL2pzb25fc2wucGwgbGluZSAzMi4KaWQgPT4KCmlkID0+IGhlbGxvCiRWQVIxID0gJ2lkJzsKaWQgPT4gNQokVkFSMSA9ICdpZCc7Cj1jdXQ=