コードでハッシュテーブルを使用しています
my %stat = ();
# read files and do some initialization
# like $stat{$key} = {k1=>v1, k2=>v2, k3=>v3};
# I have located the buggy code
# I want to do something according to c1 and c2 parsed from each line of the file
if(!exists $stat{c1}) { # I thought I would have initialized all possible used keys here, but it is not true as seen below
$stat{c1} = {k1=>0, k2=>0, k3=>0};
}
if( $c1 == $c2) {
$stat{c1}{k1}++;
} else {
$stat{c1}{k2}++;
$stat{c2}{k3}++; #Note: I forgot to check whether $stat{c2} has been initialized here!
}
map {
my $val = $stat{$_}{k1};
print "$val\n"; # run time error shows "use of uninitalized $val"
} keys %stat;
プログラムをデバッグするためのprintステートメントを作成しました。挿入したことがないにもかかわらず、ハッシュテーブル "%stat"に不思議なキー値が表示されていることがわかりました。$ stat {510}を挿入したことがないにもかかわらず、どういうわけか存在するとしますが、その値(私の場合はハッシュテーブル参照)は初期化されていません。私はステートメントを書かなければなりません:
map { delete $stat{$_} if(!defined $stat{$_}{k1}) } keys %stat;
不要なキーを削除します。
(keys%stat)から不思議な鍵が現れる理由を教えてください。
ありがとう、ジェフ