As I Please

MTのいんすとーるの練習と、その他びぼうろく・・・

perl exists の利用の順番で、無いものが存在しちゃう。

jsonを perl (JSON_decode)で読み込んで、key の 有無を見て判別しようとしてたら、下位のobjectを判定した段階で、それまで存在しなっかった上位objが未定義だけど存在することになってしまう、と言う現象ではまり。。。嘘だろ。


#!/usr/bin/perl
use strict;
use JSON;
use Data::Dumper;
#
my $testjson = { 'a' => { 'b' => '1'}};
print Dumper($testjson);

if (exists $testjson->{'a'}){ print " a exists.\n";}else{ print " a no exists.\n";}
if (exists $testjson->{'c'}){ print " c exists.\n";}else{ print " c no exists.\n";}
#
print Dumper($testjson);
#
if (exists $testjson->{'a'}->{'b'}){ print " a-b exists.\n";}else{ print " a-b no exists.\n";}
if (exists $testjson->{'c'}->{'d'}){ print " c-d exists.\n";}else{ print " c-d no exists.\n";}
#
print Dumper($testjson);
#
if (exists $testjson->{'e'}->{'f'}->{'g'}){ print " e-f-g exists.\n";}else{ print " e-f-g no exists.\n";}
#
print Dumper($testjson);
#
if (exists $testjson->{'a'}){ print " a exists.\n";}else{ print " a no exists.\n";}
if (exists $testjson->{'c'}){ print " c exists.\n";}else{ print " c no exists.\n";}
if (exists $testjson->{'e'}){ print " e exists.\n";}else{ print " e no exists.\n";}
#
exit 0;


で実行結果は、perl5.16,5.20 でも同じで、


$VAR1 = {
'a' => {
'b' => '1'
}
};
a exists.
c no exists.
$VAR1 = {
'a' => {
'b' => '1'
}
};
a-b exists.
c-d no exists.
$VAR1 = {
'a' => {
'b' => '1'
},
'c' => {}
};
e-f-g no exists.
$VAR1 = {
'a' => {
'b' => '1'
},
'e' => {
'f' => {}
},
'c' => {}
};
a exists.
c exists.
e exists.


exists で調べただけで、内容が変更されるって、、、。。。

コメントする