はじめに

perlスクリプトにおいて、サブルーチンの引数に複数の配列を渡す方法について説明します。

実現方法

サブルーチンの引数に複数の配列を渡すには、引数に配列そのものを渡すのではなく、引数の参照を渡すようにします。

サンプルコード
sub printRefArrays
{
	my($aRefArray1,$aRefArray2)=@_;

	for(my($tCount1)=0;$tCount1<=($#$aRefArray1);$tCount1++)
	{
		print $$aRefArray1[$tCount1];
	}

	print "\n";

	for(my($tCount1)=0;$tCount1<=($#$aRefArray2);$tCount1++)
	{
		print $$aRefArray2[$tCount1];
	}

	print "\n";
}

@tTestArray1=('1','2','3','4','5');
@tTestArray2=('a','b','c','d','e');

&printRefArrays(\@tTestArray1,\@tTestArray2);

このプログラムをコンパイル/実行した結果は、下記の通りです。

実行結果
12345
abcde

参照渡しは連想配列でも可能です。

サンプルコード
sub printRefArrays
{
	my($aRefArray1,$aRefArray2)=@_;

	foreach(sort keys %$aRefArray1)
	{
		$tKey=$_;
		$tValue=$$aRefArray1{$tKey};

		print $tKey.' -> '.$tValue."\n";
	}

	print "\n";

	foreach(sort keys %$aRefArray2)
	{
		$tKey=$_;
		$tValue=$$aRefArray2{$tKey};

		print $tKey.' -> '.$tValue."\n";
	}

	print "\n";
}

%tTestArray1=('name'=>'John','age'=>'31','sex'=>'male');
%tTestArray2=('hour'=>'22','minute'=>'38','second'=>'18');

&printRefArrays(\%tTestArray1,\%tTestArray2);

このプログラムをコンパイル/実行した結果は、下記の通りです。

実行結果
age -> 31
name -> John
sex -> male

hour -> 22
minute -> 38
second -> 18

これらの配列は参照渡しなので、サブルーチンの中でその中身を変更すると、サブルーチンを呼び出した側の配列の内容も書き換わってしまう点に注意してください。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まさにこれだ
2 (40%)
参考になった
2 (40%)
これじゃない
1 (20%)

表示できるメッセージはありません。