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