7. サブルーチン

7.1. 定義

サブルーチンsubs とも 関数 とも呼ばれる) とは、いくつかの操作をまとめるための方法です。

サブルーチンの定義は sub キーワードで始まります。定義したあとは、それを呼び出すことができます。
下の例を見てください:

sub alien-greeting {
  say "Hello earthlings";
}

alien-greeting;

これは、入力がまったく必要ないサブルーチンの例です。

7.2. シグネチャ

多くのサブルーチンはいくつかの入力を必要とするでしょう。それらの入力は 引数 によって与えられます。 サブルーチンが取る引数の数や型を、そのサブルーチンの シグネチャ と呼びます。

下のサブルーチンは一つの文字列を引数として取ります。

sub say-hello (Str $name) {
    say "Hello " ~ $name ~ "!!!!"
}
say-hello "Paul";
say-hello "Paula";

7.3. 多重ディスパッチ

同じ名前でシグネチャが異なる複数のサブルーチンを定義できます。 サブルーチンが呼ばれると、与えられた引数の数と型によって、ランタイムがどのサブルーチンを呼び出すか決定します。 このようなサブルーチンは普通のサブルーチンと同じように定義することができます。ただし、 sub キーワードの代わりに multi を使います。

multi greet($name) {
    say "Good morning $name";
}
multi greet($name, $title) {
    say "Good morning $title $name";
}

greet "Johnnie";
greet "Laura","Mrs.";

7.4. デフォルト引数、オプショナル引数

サブルーチンを引数を取るものとして定義した場合、必要な引数なしで呼び出すと失敗します。

そうならないように、Perl6では以下のような引数を使ってサブルーチンを定義できることもできます:

  • オプショナル引数

  • デフォルト引数

オプショナル引数は、引数の前に ? を付けて定義します。

sub say-hello($name?) {
  with $name { say "Hello " ~ $name }
  else { say "Hello Human" }
}
say-hello;
say-hello("Laura");

ユーザーが引数を渡さない場合に、デフォルトの値をセットするように指定することもできます。
サブルーチン定義の中で値を代入することによってそうできます。

sub say-hello($name="Matt") {
  say "Hello " ~ $name;
}
say-hello;
say-hello("Laura");
サブルーチンや関数についてさらに詳しくは、 http://doc.perl6.org/language/functions(英語) を参照してください。