--- title: ハッシュのハッシュをつくるよ author: kazu634 date: 2008-10-25 url: /2008/10/25/_1134/ 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=