Perlのサブルーチンで配列やハッシュを扱うには
復習してて頭がパーンしそうだったのでメモ書きしておく。
やりたいこと
- A,B,C,Dとか0,1,2,3とかの連番の値を格納した、配列のサンプルを作る
- サブルーチンに配列やハッシュを渡す(複数同時に)
- それを処理する
#! /usr/bin/perl use encoding "sjis"; use Encode; use strict; #'A'〜'D'が格納された配列@arrayを作成する. my @array = ('A' .. 'D'); #@arrayをキーとし、n1〜n3(n='A'〜'D')を格納する配列を値とする連想配列を作成する my %hash = (); foreach my $k(@array) { @hash{$k} = (); for my $j(0..3) { $hash{$k}->{$j} = $k.$j; } } sub func{ #スカラ型でリファレンスを受け取る my ($ref_a,$ref_h) = @_; # 受け取ったarrayの表示 print "array:\n "; foreach my $v ( @$ref_a ) { print $v." "; } print "\n"; # 受け取ったhashの表示 print "hash: \n"; foreach my $key1 ( @$ref_a ){ print " $key1: "; #ここらへんとかもうわけわかんない foreach my $key2 ( keys %{$$ref_h{$key1}} ){ print $$ref_h{$key1}->{$key2}." "; } print "\n"; } } # 値の表示. print "\n元の値:\n"; print "array:\n "; foreach my $v ( @array ) { print "$v "; } print "\n"; print "hash:\n"; foreach my $key1 ( @array ){ print " $key1: "; foreach my $key2 ( keys %{$hash{$key1}} ){ print $hash{$key1}->{$key2}." "; } print "\n"; } print "\nサブルーチンの値:\n"; func(\@array,\%hash); print "\n";