Perlコーディング

サブ関数

2007年11月19日
今日はサブ関数作成に挑戦です。

コール
&function_name();

関数
sub function_name {
 ・
 ・
 ・
}


Perlでは、引数は標準で参照渡しされるようです。

&function_name(hikisu1, hikisu2);

sub function_name {
 $_[0];
 $_[1];
 ・
 ・
 ・
}

引数は@_という特別な変数の中にあるので、順番に、$_[0]、$_[1]、・・・で参照できます。関数内で$_[0]や$_[1]の値を変更すると、呼び出し元の変数も変更されます。


これを値で渡したい場合(値渡し)

&function_name(hikisu1, hikisu2);

sub function_name {
 my ($val1, $val2) = @_;
 ・
 ・
 ・
}

function_nameの中だけで有効な変数に値をコピーしているので、コール側の値は変わりません。

my ($val1, $val2) = @_; は複数の引数を一度に代入していますが、
$val1 = shift @_;
$val2 = shift @_;
とすると1つ1つ指定できます。

また、Perlでは変数は宣言(my)しない限り、Globalです。
ということは、引数が変数で参照渡ししたいときは、わざわざ引数で渡さなくてもよいということ。でもきっともっと奥の深い何かがあるはず。


sub function_name {
 my ($val1, $val2) = @_;
  処理1
 return (戻り値);
  処理2
}

の様にreturnを使うと、処理2は行わず、戻り値をコール側に返して、関数を終了します。
コール側は
$modori = &function_name();
で戻り値を受け取ります。