ユーザー定義関数

ユーザー定義関数

ユーザー定義関数について

これまで printpush など、いくつかの関数を紹介してきました。今回はこの関数を自分で作成する方法を解説します。なお、自分で作成した関数はユーザー定義関数サブルーチンと呼ばれます。
よく利用する処理を関数として定義しておけば、同じ処理を何度も書かなくても、その関数を呼び出すだけで処理ができるようになります。

ユーザー定義関数を作成するには、以下のようなプログラムを記述します。

sub 関数名 {
  実際に行う処理
}

作成した関数を呼び出すには、&関数名 とします。定義した関数名の前に & をつけて呼び出します。

具体的な例として、まずはブラウザに文字列を表示する関数を作成してみます。

#!/usr/local/bin/perl

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";
print "<p>ユーザー定義関数のサンプル。</p>\n";

#ユーザー定義関数の呼び出し
&hello;

print "</body>\n";
print "</html>\n";

exit;

#挨拶を表示する関数
sub hello {
  print "<p>こんにちは!</p>";
}

これを実行すると、ブラウザに ユーザー定義関数のサンプル。こんにちは! が表示されます。

このように、&hello が呼ばれると sub hello { ~ } の中に書いた処理が実行されます。

引数を渡す方法

引数(ひきすう)とは、関数に渡す値のことです。例えば push 関数は push(@fruit, $pineapple); のようにして、関数に値を渡して処理させましたが、これをユーザー定義関数でも行うことができます。

具体的な例として、渡した値の平均値を表示する関数を作成してみます。

#!/usr/local/bin/perl

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";
print "<p>ユーザー定義関数のサンプル。</p>\n";

#ユーザー定義関数の呼び出し
&average(3, 7);

print "</body>\n";
print "</html>\n";

exit;

#平均値を表示する関数
sub average {
  $number = (@_[0] + @_[1]) / 2;
  print "<p>平均値は$numberです。</p>";
}

値を渡すときは通常の関数と同様、関数名に続いてカッコの中に値を記述します。値が複数ある場合は、コンマで区切って指定します。

ユーザー定義関数側でどのようにして値を受け取るかですが、渡されたすべての引数は自動的に @_ という配列に格納されます。ですから、1つ目の引数を参照する場合は @_[0] とし、2つ目の引数を参照する場合は @_[1] とします。

@_ は、ユーザー定義関数内で値を受け取るときに使用する特殊な配列です。

返り値を受け取る方法

返り値とは、関数から渡される値のことです。例えば pop 関数は $value = pop(@fruit); のようにして関数から渡される値を受け取りましたが、これをユーザー定義関数でも行うことができます。

具体的な例として、渡した値の平均値を返す関数を作成してみます。

#!/usr/local/bin/perl

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";
print "<p>ユーザー定義関数のサンプル。</p>\n";

#ユーザー定義関数の呼び出し
$value = &average(3, 7);

print "<p>平均値は$valueです。</p>\n";
print "</body>\n";
print "</html>\n";

exit;

#平均値を求める関数
sub average {
  $number = (@_[0] + @_[1]) / 2;
  return $number;
}

値を返すときは、ユーザー定義関数内で return を使用します。return に続けて値を指定すると、その値が関数から返されます。

返された値を実際に受け取るには、通常の関数と同様、左辺に変数を指定します。