![]() |
|||
| | HOME | ご利用について | 推奨環境 | リンクに関して | 免責/規約 | お問合せ | ミスティーネット | リンク集 | | |||
|
HOME >> サブルーチンを使ったプログラム
■ サブルーチンについて
プログラムでは、同じ処理を何度も行なうことがよくあります。 そのような処理はサブルーチンにまとめて、そのサブルーチンを呼び出して処理を行なえば、 プログラムコードが短くなり分かりやすくなります。 【書式】 sub 名前 { 処理 }下記のプログラムは入力された数値の大きさを判定して、メッセージの表示を行ないます。 【サブルーチンなし】
$input = <STDIN>; ← 入力値を変数にセット
入力された値が10未満の場合と、20より大きい場合、10〜20までの値の場合で表示メッセージを切り替えています。
if ( $input < 10 ) { ← 入力値が10未満の場合のメッセージ print "数値が小さすぎます。\n"; } elsif ( $input > 20 ) { ← 入力値が20より大きい場合のメッセージ print "数値が大きすぎます。\n"; } else { ← 入力値が10〜20場合のメッセージ print "入力値は適正な値です。\n"; } 【サブルーチン有り】
$input = <STDIN>; ← 入力値を変数にセット
入力された値をサブルーチンに渡して、サブルーチン内で判定を行なっています。&check_data($input); ← サブルーチンの呼び出し sub check_data { ← サブルーチンの定義 $data = $_; ← 引数の値を受け取る if ( $data < 10 ) { print "数値が小さすぎます。\n"; } elsif ( $data > 20 ) { print "数値が大きすぎます。\n"; } else { print "入力値は適正です。\n"; } } サブルーチンを使用する際には、サブルーチンを呼び出してやる必要があります。 呼び出しは、「subroutin()」 か 「&subroutin」 で呼び出すことが出来ます。 (subroutin はサブルーチン名です。) サブルーチンに値を受け渡したい場合には、「subroutin()」 を使います。 上記プログラムでは、入力値を判定する check_data サブルーチンに、入力値を受け渡して呼び出しています。 ■ 引数による値の受け渡し
前項でも触れましたが、サブルーチンに値を受け渡したい場合は 「subroutin()」 の () 内に受け渡したい値をセットします。 受け渡す値のことを引数(ひきすう) と呼びます。 引数が複数ある場合には、「,(カンマ)」 区切りで引数を指定します。 引数が1個の場合は、「$_ (標準変数)」 を使って受け取ります。
&message('こんにちは!'); ← サブルーチンmessage に 「こんにちは」 という文字列を渡す
引数の読み込みには、「shift」 を使って読みこむ事も出来ます。
sub message { $msg = $_; ← 受け取った値を変数にセットする print $msg; ← 値を表示する } 引数が複数の場合は、「@_ (特殊配列)」 を使って受け取ります。
&message('こんにちは!', 'さようなら'); ← サブルーチンmessage に文字列のリストを渡す
sub message { @msg = @_; ← 受け取った値を配列にセットする print @msg; ← 値を表示する } ■ サブルーチンから値を返す
サブルーチンからの返り値は、何も指定しなければ、一番最後の行が評価されてその値がサブルーチンの返り値となります。
return 関数を使うと明示的にサブルーチンの返り値を指定することが出来ます。 下記のプログラムでは、引数として渡される2つの値の合計を返します。 【合計を求めるサブルーチン】
$total = &sum (22, 43); ← 22 と 43 の合計を変数にセットする
このサブルーチンでは、引数を受け取る際に 「@_ (特殊配列)」 の要素を直接指定 ($_[0], $_[1]) してprint $total; ← 合計を表示する sub sum { $a = $_[0]; ← 22 を変数にセット $b = $_[1]; ← 43 を変数にセット $c = $a + $b ← 2値の合計を求める return $c; ← 合計の値を返す } 変数 ($a, $b) にセットしています。 ■ 変数をローカル化(局所化)する
サブルーチンや条件文など 「{ }」 で囲まれた処理単位のことをブロックと呼びます。 ブロックの外で定義している変数は、グローバル変数と呼びます。 変数をローカル化すると、その変数はローカル化したブロック内だけで有効となります。 local 関数で指定した変数は、グローバル変数で使用している変数と同名であっても、全く別の変数として扱われます。
$text = "グローバル変数です。"; ← グローバル変数をセットする
このプログラムでは、「ローカル変数です。」 の文字が表示されます。&message(); ← サブルーチンを呼び出し sub message { local ($text); ← 変数をローカル化する $text = "ローカル変数です。"; ← 変数に文字をセットする print $text; ← 変数を表示する } グローバル変数にも同名の $text 変数がありますが、サブルーチン内では、ローカル変数の $text が有効となります。 my 関数は local 関数よりも強力にローカル化を行ないます。(Perl5 より有効)
$text = "グローバル変数です。"; ← グローバル変数をセットする &message(); ← サブルーチンを呼び出す sub message { my $text = "ローカル変数です。"; ← ローカル変数をセットする print $text; ← 変数を表示する } ブロックの外と内で同じ変数名を使いたい場合に、変数をローカル化すると便利です。 Perl5 が使える環境下ならば、my 関数を使ったほうがよいでしょう。 (ミスティーネットのレンタルサーバーでは、Perl5 を使用していただけます。)
|
|||||||||||||||||||||||||||||||||||||||