Perl の defined と exists
2007-10-11-3
[Programming]
弾さんのご指摘により(感謝!)、
最近は perl でのハッシュキーの存在確認に exists を
使うようにしています。
- 404 Blog Not Found:perl, et al. - キーの存在確認
http://blog.livedoor.jp/dankogai/archives/50849003.html
それはそうと、やっかいなのが、ハッシュでツリーを扱うとき。
一度でも $a->{"a"}->{"b"} を見に行くと、
$a->{"a"} が存在するようになっちゃうんですよね。
確認するためにアクセスしただけなのに、
途中ノードができちゃうなんてちょっとなあ…。
何か良い方法はないでしょうか?
下記、defined と exists の動作確認スクリプト:
追記071012:
弾さんにツリーを壊さない方法を教えていただきました。
ありがとうございます!
- 404 Blog Not Found:perl - 木を痛めない枝チェック
http://blog.livedoor.jp/dankogai/archives/50929096.html
最近は perl でのハッシュキーの存在確認に exists を
使うようにしています。
- 404 Blog Not Found:perl, et al. - キーの存在確認
http://blog.livedoor.jp/dankogai/archives/50849003.html
それはそうと、やっかいなのが、ハッシュでツリーを扱うとき。
一度でも $a->{"a"}->{"b"} を見に行くと、
$a->{"a"} が存在するようになっちゃうんですよね。
確認するためにアクセスしただけなのに、
途中ノードができちゃうなんてちょっとなあ…。
といった方法で確認しているのですが、なんかバッドノウハウ的。if (defined %{$a->{"a"}}) { ...
何か良い方法はないでしょうか?
下記、defined と exists の動作確認スクリプト:
use strict; use warnings; my $a; # exists if (exists $a->{"a"}) { print qq(\$a->{"a"} exists\n); } else { print qq(\$a->{"a"} does not exist\n); } if (exists $a->{"a"}->{"b"}) { print qq(\$a->{"a"}->{"b"} exists\n); } else { print qq(\$a->{"a"}->{"b"} does not exist\n); } if (exists $a->{"a"}) { print qq(\$a->{"a"} exists\n); } else { print qq(\$a->{"a"} does not exist\n); } # defined if (defined $a->{"c"}) { print qq(\$a->{"c"} is defined\n); } else { print qq(\$a->{"c"} is not defined\n); } if (defined $a->{"c"}->{"b"}) { print qq(\$a->{"c"}->{"b"} defined\n); } else { print qq(\$a->{"c"}->{"b"} does not defined\n); } if (defined $a->{"c"}) { print qq(\$a->{"c"} is defined\n); } else { print qq(\$a->{"c"} is not defined\n); } # 途中ノードの存在確認 if (defined %{$a->{"a"}}) { print qq(%{\$a->{"a"}} is defined\n); } else { print qq(%{\$a->{"a"}} is not defined\n); } if (defined %{$a->{"c"}}) { print qq(%{\$a->{"c"}} is defined\n); } else { print qq(%{\$a->{"c"}} is not defined\n); }
追記071012:
弾さんにツリーを壊さない方法を教えていただきました。
ありがとうございます!
- 404 Blog Not Found:perl - 木を痛めない枝チェック
http://blog.livedoor.jp/dankogai/archives/50929096.html
■初めてのPerl |
■続・初めてのPerl 改訂版 |
この記事に言及しているこのブログ内の記事