TOP - Perl - サブルーチン - 引数

サブルーチンへ渡される引数は配列 @_ へ格納されます。

(例1)
$a = &test(3);                # サブルーチンの呼び出し

print "a = $a\n"";

sub test
{
    my $a0 = $_[0];           # 引数(@_の1番目の要素)を配列内のローカル変数に代入
    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)

print "aa1 : @aa1\n";        # @aa1の値は変更されている
print "aa2 : @aa2\n";        # @aa2の値は変更されていない

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


Copyright(C) 2006-2011 CLAYPOT. All Rights Reserved.