Perlの関数(サブルーチン)
PHPとの用語比較
・「サブルーチン」:PHPにおける関数
関数定義の書式
sub 関数名 {
処理内容;
}
引数を設定
sub 関数名 {
my($引数1,$引数2) = @_;
処理内容;
}
「shift」を使うと、引数は1つしか受け取れない
sub 関数名 {
my($引数) = shift;
処理内容;
}
返り値を設定
sub 関数名 {
処理内容;
return 10;
}
sub 関数名 {
処理内容;
return ($変数);
}
sub 関数名 {
処理内容;
return (@配列);
}
関数名の付け方
・一般に、「動詞+目的」というフレーズでネーミングする
関数の定義場所
関数を定義する場所はどこでもかまわない
関数の呼び出し
・&関数;
・&関数();
・&関数(引数);
・&関数(引数1,引数2);
・返り値 = 関数;
・返り値 = 関数();
・返り値 = 関数(引数);
・返り値 = 関数(引数1,引数2);
関数の多段呼び出しとネスト
・関数内で、別の関数を呼びだすことが可能(関数の呼び出しを行うごとにスタックを消費するため、あまり深い関数呼び出しを行うと、プログラムが異常終了してしまう危険がある)
・関数内で、別の関数を定義することが可能。これを「関数のネスト」と呼ぶ
変数のスコープ(有効範囲)
・local(変数名); ローカル変数…有効範囲:宣言された関数と、呼びだされる関数
・my(変数名); プライベート変数…有効範囲:宣言された関数内のみ
関数呼び出しの2つの方法
・call by value
・call by reference
call by value
関数内で引数の内容をいくら変更したところで、呼び出し元の変数に何ら影響を与えない
sub foo {
my($value) = @_;
ここでいくら変数$valueの内容を書き換えても、呼び出し元の変数$nにはまった変化がない
}
foo($n);
call by reference
呼び出し元の変数の内容が書き換わる
sub foo {
my($ref) = @_;
変数$$refに値を書き込めば、呼び出し元の変数$nにも書き込まれる
}
foo(\$n);
再帰呼び出し
関数内から自分自身を呼ぶ