Last Update 2008/05/18
サブルーチンへ渡される引数は配列 @_ へ格納されます。
(例1)
# サブルーチンの呼び出し
$a = &test(3);
print "a = $a\n"";
sub test
{
# 引数(@_の1番目の要素)を配列内のローカル変数に代入
my $a0 = $_[0];
# 演算結果を返す
return ++$a0;
}
実行結果
a = 4
(例2)
# サブルーチンの呼び出し
$a = &test(1, 2, 3);
print "a = $a\n";
sub test
{
# 引数を配列からリスト値として変数に代入
my ($a0, $a1, $a2) = @_;
my $b = $a0 + $a1 + $a2;
# 演算結果を返す
return $b;
}
実行結果
a = 6
(例3)
@aa1 = (1, 2);
@aa2 = (3, 4);
# 引数に配列を使用してサブルーチンの呼び出し
&test(@aa1, @aa2);
sub test
{
# 呼び出し時に記述した配列のリスト値が順に並んで@_に格納されている
print "@_\n";
}
実行結果
1 2 3 4
(例4)
@aa1 = (1, 2);
@aa2 = (1, 2);
&test1(@aa1); # 引数に配列を使用してサブルーチンの呼び出し(test1)
&test2(@aa2); # 引数に配列を使用してサブルーチンの呼び出し(test2)
# @aa1の値は変更されている
print "aa1 : @aa1\n";
# @aa2の値は変更されていない
print "aa2 : @aa2\n";
sub test1
{
print "@_ → ";
$_[0]++; # $_[0]の値を変更
print "@_\n";
}
sub test2
{
print "@_ → ";
my $a = $_[0]; # ローカル変数に引数の一つを代入
$a++; # 代入した変数を変更
print "@_\n";
}
実行結果
1 2 → 2 2
1 2 → 1 2
aa1 : 2 2
aa2 : 1 2