【Perl】リファレンスの備忘録
ハッシュの配列とか、配列のリファレンスとか。
こんがらがってきたので、一応メモ程度に。
$h1{a}と$h1->{a}は違うので注意〜。
前者はハッシュの参照?で、後者はハッシュのリファレンスの参照。
#!usr/bin/perl use strict; use Data::Dumper; my %h_a; # ハッシュの配列 my %h1; # ハッシュ my $array_ref; # 配列のリファレンス $h1{a} = 1; $h1{b} = 2; print '$h1{a}は', $h1{a}, "\n"; print '$h1{b}は', $h1{b}, "\n"; # 引数はハッシュのリファレンス、 # 戻り値は配列のリファレンス $array_ref = &test(\%h1); # 戻り値である配列のリファレンスを「@」でデリファレンス # $hはハッシュのリファレンス foreach my $h (@$array_ref) { # 配列にハッシュのリファレンスを入れる push (@{$h_a{A}}, $h); print Dumper \%h_a; } # 配列のリファレンスに入れた値を見てみる foreach my $h (@{$h_a{A}}) { print Dumper \%h_a; # $hはハッシュのリファレンスなので「->」で参照する print '$h1{a}は', $h{a}, "\n"; # 参照×(実行時はコメントアウトか何かしてね) print '$h1{a}は', $h->{a}, "\n"; } # 今度はBの方にハッシュのリファレンスを入れる push (@{$h_a{B}}, \%h1); foreach my $h (@{$h_a{B}}) { print Dumper \%h_a; print '$h1{b}は', $h{b}, "\n"; # 参照×(実行時はコメントアウトか何かしてね) print '$h1{b}は', $h->{b}, "\n"; } sub test { my ($h1) = @_; my @array; $h1{c} = 3; push (@array, $h1); return \@array; }