SAK 図書館
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 編資料