フリーCGIスクリプト配布サイト。
これまで print
や push
など、いくつかの関数を紹介してきました。今回はこの関数を自分で作成する方法を解説します。なお、自分で作成した関数はユーザー定義関数やサブルーチンと呼ばれます。
よく利用する処理を関数として定義しておけば、同じ処理を何度も書かなくても、その関数を呼び出すだけで処理ができるようになります。
ユーザー定義関数を作成するには、以下のようなプログラムを記述します。
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
に続けて値を指定すると、その値が関数から返されます。
返された値を実際に受け取るには、通常の関数と同様、左辺に変数を指定します。