--- title: ハッシュの扱い方について author: kazu634 date: 2009-03-08 url: /2009/03/08/_1206/ 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:4517;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl ---

Perlでスクリプトを書いていてはまったので、とりあえず備忘録としてまとめておきます。

ハッシュリファレンス

my %month = (
January => 1,
Feburary => 2,
March => 3,
April => 4,
May => 5,
June => 6,
July => 7,
August => 8,
September => 9,
October => 10,
November => 11,
December => 12,
);
# ハッシュリファレンスを$ref_hashに格納
my $ref_hash = \%month;
print("reference to month: $ref_hash\n");
# デリファレンスするには%$ref_hashのように表記する
my @sorted_key = sort keys %$ref_hash;
print("Sorted key: @sorted_key\n");

ハッシュリファレンスからのハッシュの要素にアクセスするには次のような方法がある:

- $$ref_hash{January}
- $ref_hash->{January}

無名ハッシュ

無名ハッシュは「{}」で指定してあげる:

my $ref_hash = {
January => 1,
Feburary => 2,
March => 3,
April => 4,
May => 5,
June => 6,
July => 7,
August => 8,
September => 9,
October => 10,
November => 11,
December => 12,
};

2次元ハッシュ

こんな感じで書くといい:

while (<DATA>) {
chomp;
if (/^\[(.*)\]$/) {
$tmp_key = $1;
}
elsif (/^(.*): (.*)$/) {
$data{$tmp_key}{$1} = $2;
}
}
# print Dumper(%data);
}
__DATA__
[total_income]
income: 227706
extra_income: 15000
[fixed_pay]
cell_phone1: 2213
cell_phone2: 9750
meals: 13230
scholarship: 9000
provider: 4095
[commute]
commute: 39890
[daily_pay]
2/01: 7130
2/02: 1044
2/03: 1710
2/04: 9360
2/05: 6810
2/06: 1405
2/07: 7608
2/08: 670
2/09: 1374
2/10: 3059
2/11: 5205
2/12: 1470
2/13: 750
2/14: 407
2/15: 2774
2/16: 2510
2/17: 1320
2/18: 1740
2/19: 6910
2/20: 2837
2/21: 7620
2/22: 6277
2/23: 1730
2/24: 2624
2/25: 4347
2/26: 1299
2/27: 987
2/28: 4900
すぐわかる オブジェクト指向 Perl

すぐわかる オブジェクト指向 Perl