値渡しと参照渡し

一般にサブルーチンに引数を渡すときには、値渡し参照渡しの2種類の方法があります。値渡しとは、引数の値をコピーしてサブルーチンに渡すものです。サブルーチン内でその値が変更されたとしても、メインルーチンの値には影響しません。一方、参照渡しではサブルーチン内での変更がメインルーチンの値に反映されます。Perlでは、原則として参照渡しになります。値渡しにしたい場合には、サブルーチン内で局所変数に値を代入し、その変数を使います。

(例) 値渡しと参照渡しの例

プログラム

$a=3;
$b=5;

&test($a,$b); # サブルーチンの実行

print "main: a:=$a  b:=$b\n"; # 変数の値を表示

sub test {
    my $my=$_[0]; # 渡された第1引数の値を局所変数にコピー(値渡しにする)
    $my=4; # 局所変数の値を変更
    $_[1]=6; # 渡された第2引数の値を変更

    print "sub : a:=$a my:=$my\n"; # 変数の値を表示
}

実行結果

sub:   a:=3 my:=4
main:  a:=3  b:=6

実行結果より、変数$aは値が変わらず、変数$bは値が変更されていることがわかります。