野暮用でこんなスクリプトを作らなければならないので作ったんだが、結果があまりにも酷かった。
$TEST{'STR'} = 'PC';
$TEST{'STR'}{'1'} = 'STR-1 values.';
$TEST{'VAL'} = 2;
$TEST{'VAL'}{'2'} = 'VAL-2 values.';
$TEST{'DAT'} = "テスト";
$TEST{'DAT'}{'3'} = 'DAT-3 values.';
td();
sub td {
foreach $mk (keys %TEST) {
print ">$mk\n";
foreach $sk (keys %{$TEST{$mk}}) { print "> $sk: $TEST{$mk}{$sk}\n"; }
}
return undef;
}
メインカテゴリとサブカテゴリを表示するというスクリプトなのだが、以下のような結果を期待していた。
>>>STR
>1: STR-1 values.
>>>VAL
>2: VAL-2 values.
>>>DAT
>3: DAT-3 values.
しかし結果はあまりにも無惨で以下のような結果となった。
>>>STR
>>>VAL
>2: VAL-2 values.
>>>DAT
>3: DAT-3 values.
連想配列名 "STR" のサブ連想配列が出てこないのだ。
これにはまいった。
何がまいったかというと、
1バイト文字列では出てこないのに、2バイト文字列もしくは数列にすると "VAL" と "DAT" のように出てくるのだ。
これは使えない。('A`)
流石にユーザーに
「カテゴリ名(表示用)はかならず 2バイト文字から始めてね」などと恥ずかしい指定は出来ない。
しかたがないので %CATEGORY と %SUBCATEGORY を作成して対応。
うーん、美しくない。
で、この影響なんだが、実は右テーブルのカテゴリリスト内にある「PC関連」に影響が出ていた。
なんと、サブカテゴリがいくつかあるのにそれが出てこず 1つのカテゴリにしかなっていなかった。(汗)
今までは普通に動いてたんだけどなぁ・・・。('A`)
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ 山銀
└ G兄