ゴミ溜め@技術系日常系雑文

主にWeb技術やそのほかつまづいたこととか引っかかって調べたこととかをまとめてます。

はてなダイアリーから引っ越しました。)

Perlのサブルーチンで配列やハッシュを扱うには

復習してて頭がパーンしそうだったのでメモ書きしておく。

やりたいこと

  1. A,B,C,Dとか0,1,2,3とかの連番の値を格納した、配列のサンプルを作る
  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";