基礎の基礎CGIに何をさせるのかどうしてCGIを使う必要があるのか?JavaScriptや、VBscriptでは絶対に出来ないことだからです。JavaScriptや、VBscriptで出来ることはCGIでさせるべきではないのです。むやみやたらにCGIを使用するとそれだけサーバーの負担が大きくなり、パフォーマンスが低下します。インターネットを楽しむ数百、数千万のユーザーに迷惑をかけることになります。それでは、どのようなことをさせるのか、答えは簡単です。JavaScriptや、VBscriptでは絶対に出来ないことは、ファイル処理だけだからです。挨拶文はJavaScriptで十分事足ります。してJavaScriptや、VBscriptでファイル処理が行なえないのでしょう。JavaScriptや、VBscriptはダウンロードしたブラウザで動作しています。万が一不貞なやからが進入し、ユーザーのハードディスクを破壊することも簡単に行なえるようになります。インターネットにアップロードするファイルは、個人のハードディスクにデータを貯えても何の意味も有りません。当サイトで紹介するCGIスクリプトは、すべてPerl言語で書かれています。CGIは、他にShellや、C言語でも作成できますが、Perlは、コンパイルする必要もなく、手軽で、今一番多く使用されています。Perlで作成するスクリプトの先頭行には、必ずPerlが実行できるサーバーのパスを入力しなければなりません。#!/usr/local/bin/perlほとんどのサーバーはこの記述で大丈夫だそうです。ちなみに、私の加入しているBIGLOBE、#!/usr/local/bin/perl高知県で一番多くの会員を持つinforyomaでも、#!/usr/local/bin/perlです。この時一行目の「#」は、コメント行とはみなされません。削除しないでください。基本的な型CGIの計算結果のそのほとんどは、HTMLドキュメントとして返すか、GIF画像を返すか、何も返さないが、ファイルに記録するかです。GIF画像を返すスクリプトの代表的なものがグラフィックアクセスカウンターです。それ以外のほとんどのスクリプトは、ファイル操作をし、HTMLドキュメントを生成しています。"Content-type:text/html\n\n";このヘッダーより下に通常のHTMLタグでドキュメントを生成します。"</html>\n";perlの文法や特徴1行目以外の#で始まる行はコメントで実行されません。それ以降がコメントになります。実行文の最後には、必ず「;」を置きます。変数は、いつでも、何処からでも使用する事ができます。他の多くの言語のように、前もって使用する変数名を宣言しておく必要もなければ、エラーも発生しません。どちらでも代入できます。処理の固まり(ブロック)は、「{」と「}」で囲みます。大文字小文字を判別します。マックOSでは、大文字、小文字を判別しないと思いますが、UNIXでは、別物なのです。「'」は、固定定数で、引用符内で変数展開ができません。"この色は$colorです。'この色は$colorです。';同じように見えますが、結果はこの色は赤です。この色は$colorです。変数名は、英字または"_"で構成しなければなりません。「日本語」を使用することは出来ません。直前のパターンマッチの各括弧に対する文字列...他にも有りますが、これだけ覚えておけば大丈夫でしょう。(1..5)は(1,2,3,4,5)と同じ。値を代入するには、「=」を使用します。$aに2が格納されます。$aに6が格納されます。$aと$bに同時に4が格納されます。$bに6を代入し、$aに11を格納します。ように両側に同じ変数名が現われるような式が頻繁に使用されます。この右側の変数名を省略して計算結果を代入する式を二項代入演算子といいます。"abc";インクリメントとデクリメント上の式で、プラスかマイナスされる値が1の場合に限りさらに省略する事ができます。$b++;では、結果が異なります。前置き「++」は、$aに1プラス後$bに代入しますが、後置き「++」は、$aを$bに代入後$aに1プラスします。$a--;デクリメントも、インクリメント同様に、前置き「--」と、後置き「--」では、機能が異なります。文字と数値の演算perlは、文字と数値を計算させても何も文句も言わず計算します。"6.86abc"の結果は10になります。文字列は、10進数の数値に自動的に変換されるからです。次の検索・置換でよく使われます。/PERTERN/;文字列(STRING)がPATTERNに一致するかどうかを調べる。}この結果は、「一致」と表示されます。/[PERTERN]/一対のブラケット[]の中に並べた文字、どれか一つでもマッチすれば「真」で、フォームデータのデコードなどでよく使用されます。s/PATTERN/REPLACEMENT/ig;変数の中で、PATTERNに一致する部分をREPLACEMENTで置換し、結果を変数に戻します。付けると、変数のPATTERN全てを置換します。書式(3)では、さらに大文字、小文字を区別しない「i」オプションを付けています。s/'q'//g;では、「Terra」となります。これは、書き込みボードでタグを禁止する例です。文字列関数chop(STRING)文字列STRINGの最後の文字を切り落とし、結果を返します。length(STRING)文字列STRINGの長さをバイト数で返します。length('早苗ちゃん');$str_lenには、2バイト文字ですのて10が代入されます。substr(STRING,OFFSET,LENGTH)文字列STRINGのOFFSETバイト目からLENGTHバイト取り出した文字列を返します。Itami'',5,5);$first_nameには、「Itami」が代入されます。省略すると、OFFSET以降最後までの文字列が返されます。見つかった位置をバイト数で返します。"「くだもの」ではないかもね";}処理ブロックが多い場合は、書式(2)を使用したほうがスクリプトが見やすくなります。{ブロック;}条件が真の間、ブロックを実行します。{ブロック;}untilは、whileの正反対の判断をし、条件が偽の間、ブロックを実行します。{ブロック;}式1が、式2になるまで式3のステップでブロックを実行します。"$i\n";}最初$iが1で、$iが10になるまで$iに1プラスしながら$iの値を表示しつづけます。while文とuntil文の判断がループの最後に行なわれるものです。}listの1番から順に変数に代入し、ブロックを実行。listが終了した時ループから抜け出します。}ループ制御コマンドlast文ループの実行を即座に断ち切って抜け出します。残りのコードをスキップして判断文に制御を移します。残りのコードをスキップしてループの先頭に戻ります。この時、制御判断を行ないません。('早苗ちゃん','ゆみちゃん','恵子ちゃん','美香ちゃん');としても同じです。@DATA[0..3]としても同じ結果が得られます。配列の要素番号をあらわす数値または文字列を添字といいます。$DATA[3]の場合「3」が添字です。フォームデータを参照する場合の、$FORM{'name'}の「name」もいわば添字です。配列の添字は、0から始まり、使用した数で終わります。@DATA;のように配列変数を通常の変数に代入するだけで得られます。この時、$countには、4が代入されますが、$DATA[4]の添字は有りません。添字は0から始まりますので、使用できる添字は、0から3の4個となるのです。配列リスト操作関数shift(@DATA)配列@DATAの最初の要素を取り出します。shift(@DATA);$nameには、'早苗ちゃん'が格納されます。この時、各要素は1つずつシフトアップされ、要素数も1つ減ります。$list)配列@DATAの先頭に$listの値を追加します。$list);今まで先頭にいた'早苗ちゃん'の前が'みゆきちゃん'になり、'早苗ちゃん'は、@DATA[1]にシフトされます。この時、要素数も1つ増えます。pop(@DATA)配列@DATAの最後の要素を取り出します。pop(@DATA);$nameには、'美香ちゃん'が格納されます。この時、要素数も1つ減ります。$list)配列@DATAの最後に$listの値を追加します。要素数も1つ増えます。sort(@DATA)配列@DATAを文字コード順(昇順)に並べ替えます。reverse(@DATA)配列@DATAを逆に並べ替えます。同じ変数名の記号が、「$」に代わります。他にも有りますが、私のような中級には必要ありません。入出力モードの指定ファイル名の前に、以下の記号を付けます。ダイヤモンド演算子といいます。<DB>;ファイルを入力モードでオープンし、ファイルの最後まで表示します。{print;}配列変数に一度に代入する事も出来ます。指定したファイルにSTRINGを書き出します。ファイルを上書きモードオープンし、一行づつ書き出します。'美香ちゃん';close(DB);ファイルを上書きモードでオープンし、配列を一度に書き出します。@DATA;close(DB);ファイルを追加モードでオープンし、最後に一行追加します。