ミスティーネットPerl・CGI講座 パール・CGIレッスン MISTY-NETレンタルサーバー・PERLプログラミング講座 CGI&PERL究極のレシピ

管理運営:有限会社ミスティーネット

| HOME | ご利用について | 推奨環境 | リンクに関して | 免責/規約 | お問合せ | ミスティーネット | リンク集 |
Perl言語リファレンス

ミスティーネットPerl・CGI講座/基本編
ミスティーネットPerl・CGI講座/基本編
始めに 始めに
変数について 変数について
処理の制御1 処理の制御1
処理の制御2 処理の制御2
配列の処理 配列の処理
ハッシュの処理 ハッシュの処理
数値の扱い 数値の扱い
文字の扱い 文字の扱い
時間の処理 時間の処理
サブルーチン サブルーチン
ファイルの処理 ファイルの処理
ディレクトリの処理 ディレクトリ処理
CGIについて CGIについて
漢字の処理 漢字の処理
    (文字コード)
Cookie の処理 Cookie の処理
正規表現1 正規表現1
正規表現2 正規表現2
演算子について 演算子について
ライブラリ ライブラリ
デバッグ デバック
環境変数について 環境変数
ミスティーネットPerl・CGI講座/基本編

ミスティーネットPerl・CGI講座/応用編
ミスティーネットPerl・CGI講座/応用編
カウンターを作ってみよう カウンターを
     作ってみよう!
ミニゲームを作ってみよう ミニゲームを
     作ってみよう!
ミスティーネットPerl・CGI講座/応用編

ミスティーネットPerl・CGI講座/WEB講座一覧
ミスティーネット
HTML講座 HTML講座
スタイルシート講座 スタイルシート講座
JavaScript講座 JavaScript講座
UNIXコマンド講座 UNIXコマンド講座

ミスティーネット
ラブラブメールでツーショット

人気サイトランキング

人気サイトランキング

8daysランキング

  HOME >> サブルーチンを使ったプログラム
  1. サブルーチンについて
  2. 引数による値の受け渡し
  3. サブルーチンから値を返す
  4. 変数をローカル化(局所化)する
■ サブルーチンについて
プログラムでは、同じ処理を何度も行なうことがよくあります。
そのような処理はサブルーチンにまとめて、そのサブルーチンを呼び出して処理を行なえば、 プログラムコードが短くなり分かりやすくなります。
【書式】 sub 名前 { 処理 }
下記のプログラムは入力された数値の大きさを判定して、メッセージの表示を行ないます。

【サブルーチンなし】
$input = <STDIN>;    ← 入力値を変数にセット

if ( $input < 10 ) {    ← 入力値が10未満の場合のメッセージ
   print "数値が小さすぎます。\n";
}
elsif ( $input > 20 ) {    ← 入力値が20より大きい場合のメッセージ
   print "数値が大きすぎます。\n";
}
else {    ← 入力値が10〜20場合のメッセージ
   print "入力値は適正な値です。\n";
}
入力された値が10未満の場合と、20より大きい場合、10〜20までの値の場合で表示メッセージを切り替えています。

【サブルーチン有り】
$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 に 「こんにちは」 という文字列を渡す

sub message {
   $msg = $_;    ← 受け取った値を変数にセットする
   print $msg;    ← 値を表示する
}
引数の読み込みには、「shift」 を使って読みこむ事も出来ます。


引数が複数の場合は、「@_ (特殊配列)」 を使って受け取ります。

&message('こんにちは!', 'さようなら'); ← サブルーチンmessage に文字列のリストを渡す

sub message {
   @msg = @_;    ← 受け取った値を配列にセットする
   print @msg;    ← 値を表示する
}





■ サブルーチンから値を返す
サブルーチンからの返り値は、何も指定しなければ、一番最後の行が評価されてその値がサブルーチンの返り値となります。 return 関数を使うと明示的にサブルーチンの返り値を指定することが出来ます。

下記のプログラムでは、引数として渡される2つの値の合計を返します。

【合計を求めるサブルーチン】
$total = &sum (22, 43);    ← 22 と 43 の合計を変数にセットする
print $total;    ← 合計を表示する

sub sum {
   $a = $_[0];    ← 22 を変数にセット
   $b = $_[1];    ← 43 を変数にセット
   $c = $a + $b    ← 2値の合計を求める
   return $c;    ← 合計の値を返す
}
このサブルーチンでは、引数を受け取る際に 「@_ (特殊配列)」 の要素を直接指定 ($_[0], $_[1]) して
変数 ($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 を使用していただけます。)




← 前のページへ戻る 次のページへ →


| HOME | ご利用について | 推奨環境 | リンクに関して | 免責/規約 | お問い合わせ | ミスティーネット |
(C)Copyright 2002 ミスティーネット Inc. All Right Reserved.