--- title: ハッシュのハッシュをつくるよ author: kazu634 date: 2008-10-25 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4351;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl ---

次のような形式のデータを、%hash{income}{income}のようにしてアクセスできるようにするためのスクリプトを書くよ。ハッシュのハッシュが参考になりました。

# === Libraries ===
use strict;
use warnings;
use Data::Dumper;
# === Variables ===
my $category;
my %hash;
# === Main part ===
while (<DATA>) {
chomp;
if (/^\[(.*)\]$/) {
$category = $1;
} elsif (/^(.*)=(.*)$/) {
$hash{$category}{$1} = $2;
}
}
foreach my $x (keys %hash) {
print $x, "\n";
foreach my $y (keys %{$hash{$x}}) {
print "$y: $hash{$x}{$y}\n";
}
}
__DATA__
[income]
income=174621
extra=11000
extra=7500
[fixed charge]
phone=5318
meals=11834
scholarship=9000
[daily pay]
20081001=12640 | フェルメール展
20081002=51500 | Ayur-chair
20081003=750
20081004=4200
20081005=5500
20081006=11200 | 交通費: 10000(→次月に支給…のはず)
20081007=1300
20081008=6600 | 立川で泊まった
20081009=1360
20081010=1500
20081011=4400
20081012=3520 | クリーニング
20081013=6900 | 床屋さん
20081014=1520
20081015=980
20081016=1410
20081017=5920 | ミュージカル・「Family」
20081018=1930 | SW用写真
20081019=4420 | クリーニング
20081020=960
20081021=1750
20081022=2000
20081023=5000 | 交通費
20081024=1030
20081025=
20081026=
20081027=
20081028=
20081029=
20081030=
20081031=