Memoize |
BasicWerk
EC Support
Technique
Facebook
|
20141226012754_Perl_hash_reference |
|
Perl_hash_reference
無名ハッシュリファレンス。
% reply
# コードブロックではないことをコンパイラに対して伝えるためには
# +{ } の形で書く
4> my $hash_ref = +{};
$res[3] = {}
# ちなみにコードブロックであることを明示するときは {; }
# ハッシュリファレンスに key と value を登録
6> $hash_ref->{'aaa'} = 1;
$res[4] = 1
7> $hash_ref
$res[5] = {
'aaa' => 1
}
# ハッシュリファレンスをハッシュとして参照
8> keys %{$hash_ref};
$res[6] = 'aaa'
だから例えば次のようなデータ構造は
Members
John
age 34
part guitar
Ian
age 35
part vocal
Reni
age 33
part drums
Mani
age 35
part bass
こんな風に書ける sample_hash_ref.pl
#! /usr/bin/perl
use warnings;
use strict;
my @members = (
+{
'1_name' => 'John',
'2_age' => 34,
'3_part' => 'guitar',
},
+{
'1_name' => 'Ian',
'2_age' => 35,
'3_part' => 'vocal',
},
+{
'1_name' => 'Reni',
'2_age' => 33,
'3_part' => 'drums',
},
+{
'1_name' => 'Mani',
'2_age' => 35,
'3_part' => 'bass',
},
);
# 文字列ファイルハンドル
open my $out, ">", \ my $string;
print $out "Members\n";
foreach my $member (@members) {
foreach my $att (sort keys %{$member}){
my $val = $member->{$att};
print $out "\t$att\t$val\n";
}
}
close $out;
$string =~ s/1_name\t//g;
$string =~ s/(?:2|3)_/\t/g;
print $string;
実行してみる
% chmod a+x sample_hash_ref.pl
% sample_hash_ref.pl
Members
John
age 34
part guitar
Ian
age 35
part vocal
Reni
age 33
part drums
Mani
age 35
part bass
|
| © Shin Nakamura/BasicWerk 2008 - 2014 |