一度コンパイルしてしまうと変更することもできません。他のサイトから無料でダウンロードしてもご自分では何も変更できません。コンパイラが必要になります。これらの問題をすべてカバーしてくれるのがPerl(以下Perl、パールと読む)言語です。Perlは、テキストベースで動作するコンパイラ言語ですので、作成するのはテキストファイルだけです。このテキストページにアクセスがあればPerlが自動でコンパイルして実行されます。Perlは、C言語の長所とBASICの長所を合わせ持つ高級言語なのです。これらの理由から現在CGIとして世界中で最も使用されているのがPerlです。本サイトは、すべてPerlで作成するCGIを解説しています。それでは、Perl言語が理解できればCGIは作成できるかと言えば、答えはNOです。Perlそのものはインターネットの為に開発された言語でもなければ、CGIの為に開発された言語でもありません。Perlだけの知識ではCGIを開発する事ができません。Webサーバには環境変数というCGIにとって都合のいい代物が存在します。Perlは、この環境変数と言語を組み合わせる事でCGIを実現します。訪問者のホスト名がセットされています。IPアドレスがセットされている場合は、ドメイン変換ルーチンを使って変換できます。訪問者のIPアドレスがセットされています。認証ユーザ名がセットされています。ほとんどのプロバイダでは何もセットされていません。訪問者のブラウザ名がセットされています。訪問者のブラウザがサポートするMIMEタイプのリストがセットされます。訪問者が何処から来たか、参照元の完全なアドレスがセットされています。(ブックマークや、直接アドレスが入力された場合は何もセットされない)現在ではプライバシー保護の為、ほとんど取得できない。サーバのドメイン名か、サーバのIPアドレスがセットされています。サーバ管理者のメールアドレスがセットされています。(大変忙しい方々です。むやみにメールを出すのは控えましょう。Webサーバのソフトウェアの名前と、バージョンがセットされます。サーバ上で実行されているCGIのバージョンがセットされます。サーバのドキュメントルートディレクトリのパスがセットされます。サーバへのアクセスに使用されたプロトコルの名前とバージョンがセットされます。現在実行されているスクリプトの相対パスがセットされています。<form>タグのmethodアトリビュートが返されます。POSTクエリーにより送られてきた文字数がバイト単位で格納されています。GETクエリーにより送られてきたフォームからのデータが格納されています。サーバからアクセスできるCOOKIEの値がセットされています。環境変数は$ENV{'環境変数名'}で簡単に取得できます。訪問者が使用しているブラウザを知るには$ENV{'HTTP_USER_AGENT'}を調べます。初期設定perlスクリプトの最初の行には、#!usr/local/bin/perlのようなperlが存在するパスを書く必要があります。1行目が空白行でも、先頭にスペースがあってもエラーになります。#!usr/bin/perlに設定されています。このperlのパスに原因があります。前述のとおりperlの先頭行にはperlのパスを記述する必要があります。環境変数を含めた動作環境を設定する変数を初期化(値の代入)するコードを置くのが一般的です。'jcode.pl';これは、文字列を日本語コードに変換するライブラリを読み込んでいます。世界中のサーバを自由に操作できる事、これがインターネットの最大の特徴です。日本語のページでも外国のサーバに置かれているサイトも大変多いのです。そこで問題になるのが時差です。perlには環境変数を操作して時差を修正することができます。time;これは、環境変数$ENV{'TZ'}国際標準時間に9時間プラスして日本時間にしてシリアル値を取得しています。サーバの中には$ENV{'TZ'}環境変数が機能しないものもあります。このような場合を想定してすべての時刻を世界標準から算出しておけば問題なく動作させることができます。訪問者ごとに記憶されることはありません。時として訪問者ごとに保存しておきたい情報もあります。インターネットを利用した通信販売では訪問者ごとに購入しようとする商品が異なります。これらをデータファイルに保存することはできません。このような個人情報を一時的に記憶させる機能がクッキーです。クッキーは訪問者の情報をサーバが訪問者のブラウザに書き込む事で実現しています。クッキーの書式クッキーにデータを保存するには「Set-Cookie」ヘッダーを使用します。名称は英数字で自由に付けることができます。他のCGIスクリプトと重複しないことだけには気をつける必要があります。保存するデータ保存するデータもプログラマが自由に作成できます。Key!値という書式で記録しています。それぞれの項目は","で区切り、キーと値は通常あまり使用しない"!"で区切っています。【例】name!Terra,email!terra@xx.xxxx.or.jp,hp!http://www.xxxx.or.jp/terra/保存期限クッキーには保存しておく期限を設定する必要があり、書式にも厳密な規則があります。日は、0を省略せずに'01','02','03'のように現します。置き換える必要があります。時分秒も0を省略することはできません。次のサンプルでは30日間の期限を指定し、書式を設定しています。expires=$date_gmt\n";汎用的な書き込み、読み込みルーチン汎用的に利用できるサブルーチンにしておけば、張りつけるだけで、CGIを作成するたびに書き換える必要がなくなります。自分のホームページへのアクセス数を知る代表的なものにアクセスカウンターがあります。どなたが何回訪れたのかは把握できません。それぞれの訪問者のブラウザにカウントを記録しておけば、訪問者ごとにカウントする事も可能になります。"&ltp>本日$COOKIE{'today'}回、合計$COOKIE{'total'}回目のご訪問ありがとうございます。掲示板やチャットなど、よく利用するページで、名前やメールアドレスを毎回記入するのは厄介なものです。クッキーを使用すれば2回目以降は、予め入力されていて訪問者は省略することができます。クッキーに書き込むコードは、データをファイルに書き込んだ直後に置きます。30);書き込まれたクッキーの情報をフォームを作成するときに展開します。"</form>\n";関数とサブルーチンperlでは関数とサブルーチンを区別しません。基本的にすべてが関数です。perlではすべてのサブルーチンで最後に処理された変数を帰します。その帰された値を使用するもしないもプログラマ次第です。使用すれば関数で使用しなければサブルーチンということになります。関数の宣言にはsubキーワードで始まるブロックで記述します。$b;$c;}functionは英数字でプログラマが自由に付けることができます。関数内ではlocalキーワードを使用して関数内だけのスコープ(有効範囲)を持つローカル変数を使用できます。メインルーチンで同名の変数名が使用されていても値に影響を与える心配がありません。したがって汎用的な関数を記述する事が可能になるのです。関数の呼出し関数や、サブルーチンを呼び出す場合は、関数名の前に「&」を付けます。サブルーチンの場合は戻り値を必要としません。次のような記述だけで制御をサブルーチンに移すことができます&function;関数は戻り値を受け取りますので次のようにします。&function;この場合、戻り値は$valueに格納されます。{・・・・・・・}と書くこともできます。関数は、関数内で他の関数を呼び出す事も、自分自身を呼び出すこともできます。引数を渡す関数、サブルーチンに引数を渡し、その引数を利用して計算させることもできます。&function(3);とします。スカラ変数だけでなく配列変数を渡すこともできます。関数や、サブルーチンは引数を受け取り計算、処理することもできます。呼び出し時に指定された引数は、特殊変数@_に格納されています。3.14159;}この例では引数に円周率を掛けて帰しています。$b;}この例は、2つの引数を受け取り、その積を帰しています。配列を受け取るには、次のように書きます。$_;}$max;}これは、受け取った配列変数の数値を1つずつ調べ、最大値を帰しています。次のサンプルでは、ディレクトリないのサブディレクトリや、ファイル名、ファイルのサイズを表示しています。ディレクトリの場合は、自分自身を呼び出しその内部も表示します。