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 編資料