SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

CGI-Perl 基礎編 (その四) 基本事項、ユーザ関数 sub、function、return、my

■基本事項

  ・構文には C、C++、JAVA と同じく大文字小文字の厳密な区別がある。
    従って、$i と $I は別の変数である。
    また、組み込み関数など大文字小文字を正確に記述すること。

  ・パラメタは C とは違い VB と同じアドレス渡しである。
    従って、ユーザ関数内で @_ を変更すると呼んだ側の変数の値も変わってし
    まうので注意すること。

■ユーザ関数

  sub UserFunction
  {
    my($val) = @_;
    コード...
    return returncode;
  }

  function UserFunction
  {
    my($val) = @_;
    コード...
    return returncode;
  }

  ** @_ には、引数(パラメタ) が渡ってきます。
  ** 第一パラメタは @_[0]、第二パラメタは @_[1] と言う風に参照します。
  ** return には戻り値を渡すことができます。

■検証サンプルコード

#!/usr/local/bin/perl
#// 変数、パラメタ検証サンプルコード

#// 準備
  $i = 10;
  $I = 20;
  $j = 30;
  $k = 40;

#// ユーザ関数呼び出し
  $k = test($j);

#// 変数内容表示
  print "Content-type: text/html\n\n";
  print "<HTML>\n";
  print "i = $i<BR>\n";
  print "I = $I<BR>\n";
  print "j = $j<BR>\n";
  print "k = $k<BR>\n";
  print "</HTML>\n";
  exit(0);

#// ユーザ関数 test
sub test
{
  my($a) = @_;

  $a--;
  @_[0]++;

  return 50
}

【実行結果】
  i = 10
  I = 20
  j = 31
  k = 50

  ** $i = 10 と $I = 20 なので、$i と $I は別物と証明されます。
  ** ユーザ関数 test の中で $a-- していますが、これはパラメタをローカル
     変数 $a に代入した $a のデクリメントなので、$a = 29 に関数内ではな
     っていまが呼び出し側の $j に影響は与えません。
     また、ユーザ関数 test の外部からは $a は参照できません。
     my($a) の有効期間は関数 test の実行内だけです。
     test が return で終了すると $a は消滅します。
     C 言語で言う static ローカル変数の宣言は Perl では見当たりませんで
     した。グローバル変数で処理するしかないでしょう。
  ** 尚、グローバル変数(ここでは $i 等) は、関数内から直接アクセスできま
     す。ローカル変数やパラメタはうまく利用すると良いです。
  ** 関数内で @_[0]++ しているのは、アドレス渡しの $j を操作しているのと
     同じことですので、$j はインクリメントされて 31 になります。
  ** 関数内で return の戻り値に 50 を指定しているので、メインルーチンの
     $k に代入されて $k = 50 になります。

関数の考えた方やグローバル、ローカル変数のスコープなど VB と共通の概念で
す。『VB 基礎編 (その五) 関数構造(sub、function)』も参考にされると良いで
しょう。

■CGI-Perl 基礎編資料
■CGI-Perl 基礎実地編資料
■CGI-Perl 応用実地編資料
■PHP 基礎編資料
■PHP + MySQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2024 Y.SAK