Perlの小部屋
Perlのプログラミングや利用方法を基本的を中心に情報提供しています

サブルーチン

サブルーチンは繰り返し利用されるルーチン作業をモジュールとしてまとめたものです。繰り返し現れる作業をサブルーチン化することで、可読性や保守性を高く保つことができます。

サブルーチンの定義

サブルーチン名の付け方の制約は変数名と同じで、一般的には最後に置かれます。

# sub サブルーチン名 { 処理 }
sub サブルーチン名 {
  # 処理
}

サブルーチンの呼び出し

引数を渡して、処理した結果を戻り値として受け取ることができます。

# & サブルーチン名(アンパサンド + サブルーチン名)
$a = 50;
$b = 85;
$c = 65;

&subroutine_name;

sub subroutine_name {
    $total = $a + $b + $c;
    $average = $total / 3;
    print "合計は$totalで、平均は$averageです。";
}

引数を渡して、処理した結果を戻り値として受け取ることができます。

引数の受け渡し
引数の渡し方 A) &abc(@list);(引数 @list を渡すとき)
B) &abc(%list);(引数 %list を渡すとき)
C) &abc(\@list1,\@list2);(引数 @list1 と @list2を渡すとき)
引数の受取り A) @_(渡された引数は、配列 @_ で受け取る)
B) %list = @_(渡された引数は、配列 @_ で受け取る)
C) ($list1, $list2) = @_(渡された引数は、配列 @_ で受け取る)
# 引数を渡す &サブルーチン名(引数);
&subroutine_name(80, 55, 75);

sub subroutine_name {
    # ここで引数を@_で受け取る
    ($a, $b, $c) = @_;
    #配列で受け取ることもできます
    #$total = $_[0] + $_[1] + $_[2];
    $total = $a + $b + $c;
    $average = $total / 3;
    print "合計は$totalで、平均は$averageです。";
}

サブルーチンの戻り値は return を使って戻すことができます。

# 戻り値は return;
($total, $average) = &answer(80, 55, 75);
print "合計は$totalで、平均は$averageです。";

sub subroutine_name {
    # ここで引数を@_で受け取る
    ($a, $b, $c) = @_;
    $total = $a + $b + $c;
    $average = $total / 3;
    # 配列で値を返す
    return ($total,$average);
}

& と () の省略形

# 引数がない場合 : () を記述すれば、& は省略可
# 省略なし
&hello();

# 引数がない場合()省略可
&hello;

# & の省略は可
hello();

引数の渡と戻り値として受け取る注意 -変数-

「my」による「レキシカル変数」の宣言

レキシカル変数は、スコープの終わりになると、寿命がつきて、メモリから解放されます。推奨される変数

「our」による「パッケージ変数」の宣言

ひとつの名前空間に属するグローバル変数です。パッケージ変数は、修飾名(パッケージ名)を持ち、ソースコードのどの位置からでも参照でき、宣言して初期化されると、プログラムの最後まで、その値は存在し続けます。

「local」による値の保存と復元

local 宣言されると、スコープの終わりでグローバル変数の値を元に戻してくれます。

プログラム(スクリプト)全体で参照可能な変数をグローバル変数といい、サブルーチンなどのブロックの中だけで利用可能な変数をローカル変数といいます。 変数は、初期値としてはグローバル変数となりますので、特に何も定義をしない変数はすべてグローバル変数とみなされます。

ページトップ