ファイルを新規に作成する場合はファイルハンドルを出力用にオープンします。オープンに失敗すれば、その時点でプログラムの実行を強制終了します。&errorサブルーチンを実行します。ファイルハンドルをクローズします。ファイルハンドルxxから行を読み込みます。whileの条件式に使うと読み込んだ行が自動的に$_に格納され、ファイルの終わりまで繰り返します。ファイルハンドルから、指定されたバイト長のデータを読み込みます。ファイルハンドルを指定してファイルに書き込みます。ファイルハンドルを省略すると標準出力STDOUTになります。引数を省略すると$_になります。ファイルを削除します。ファイル名を変更します。パーミッションを変更します。ファイル又はディレクトリが存在すれば真、存在しなければ偽になります。"new.txtが存在します。"new.txtが存在しません。"new.txtが存在します。"new.txtが存在しません。&error("new.txtをオープンできません。exit;}■実行結果12341234ABCDnew.txtが存在します。new.txtが存在しません。new.txtをオープンできません。ディレクトリの操作ディレクトリの中にあるファイル名の読み出しにはディレクトリハンドルを使います。ディレクトリハンドルは任意の名前で英大文字にします。ディレクトリハンドルを作成し、指定したディレクトリに関連付けます。&errorサブルーチンを実行します。ディレクトリハンドルをクローズします。ディレクトリの中にあるファイル名を読み出します。カレントディレクトリ「.」と上位ディレクトリ「..」を含みます。ファイル名を格納順に読み出します。全ファイル名を@fileに読み込みます。ディレクトリを作成します。ディレクトリ名とパーミッションを指定します。ディレクトリを削除します。"dataディレクトリが存在します。"dataディレクトリが存在しません。"dataディレクトリが存在します。"dataディレクトリが存在しません。exit;}■実行結果dataディレクトリが存在します。dataディレクトリが存在しません。ファイルロック複数の人が同時に同一のファイルに対して読み書きを行なうと正常に書き込まれない場合があります。そこで、ファイルロックにより1人がファイルにアクセスしている間は他の人がそのファイルにアクセスできないようにします。ファイルロックの方法として、ファイルロック関数flock、シンボリックリンク関数symlink、ディレクトリ作成関数mkdirを使用する方法があります。flock、symlinkはサーバによっては使用できない場合があるので、ここではmkdirによる方法を記述します。この方法はディレクトリの有無がファイルアクセスの有無を表します。mkdirがディレクトリの存在チェックと生成を同時に行えることを利用しています。処理の流れを下記に示します。1.ファイルアクセスの前にmkdirを実行します。2.mkdirはディレクトリが存在しなければディレクトリを生成し「真」を返します。ディレクトリが存在すると「偽」を返します。3.「真」の場合はファイルアクセスを行います。4.「偽」の場合はウェイト後リトライします。指定回数リトライしても「偽」の場合はタイムアウトで終了します。5.ファイルアクセスが終了したらディレクトリを削除します。指定した秒数スリープする。サーバからCGIプログラムへのデータ受け渡しに使われます。これはサーバによって自動的にハッシュ%ENVに格納され、読み出しは$ENV{'CONTENT_LENGTH'}のように行います。フォームからのデータ入力やクッキーの受け渡しなどができます。主な内容を下表に示します。下記のプログラムは環境変数の一覧を表示します。(Unix)ホスト名の取得IPアドレスは環境変数$ENV{'REMOTE_ADDR'}で取得できます。ホスト名はDNSサーバ問合せの負荷がかかる為、環境変数$ENV{'REMOTE_HOST'}では取得できない場合が多いようです。そこで、IPアドレスからホスト名を取得するにはgethostbyaddrを使います。IPアドレスに対応するホスト名を取得します。■HTTPヘッダーHPを表示する際、サーバからブラウザへHTTPヘッダーが送信されます。CGIが出力する主なヘッダーを下記に示します。urlページのリロード■METAタグHTMLのMETAタグでHTTPヘッダーを補完することができます。METAタグは<head>と</head>の間に記述します。(注)<>は半角で記述します。t秒後にurlページをリロードデータの入力フォームからデータを入力して表示します。受け渡しの情報は環境変数%ENVに自動的に格納されます。フォームからの入力方法にはGETとPOSTがあり下記の特徴があります。GETかPOSTかは入力のformタグのmethodで指定し、環境変数REQUEST_METHODに格納されます。methodを指定しない場合はGETになります。GET・フォーム入力データは送り先のURLの後に?を付けて渡される。・フォームだけではなくリンクタグでデータを簡単に渡すことができる。・入力データは環境変数QUERY_STRINGに格納される。・環境変数に格納できるデータ長が限定される。・入力データがURLで表示されるので内容が分かってしまう。POST・入力データは標準入力STDINに格納される。・データ長が環境変数CONTENT_LENGTHに格納される。・大量のデータを送ることができる。・入力データはURLに表示されない。フォームから入力されたデータは下記のようにURLエンコードされます。その為、入力データを表示するにはデコードして元に戻す必要があります。・「名前=値」で一対にします。・複数の対は&で区切ります。(名前=値&名前=値)・空白は「+」に変換します。・日本語文字コードは%に続いて16進数2桁で表します。標準入力STDINからデータを読み取る。入力されたデータ「word=データ」をsplitで分離する。trで「+」を空白に変換する。文字コードを日本語に変換する。複数データの入力いろいろなフォーム形式から複数のデータを入力します。複数のデータ対を&で分離して@pairに格納します。データの名前$nをキーにしてデータ値$valをハッシュ%inに格納します。フォーム入力データのデコードなどを処理するライブラリです。cgi-lib.plでデコード処理を行うサブルーチンです。フォーム入力データの名前をnameとするとデータは$in{'name'}に格納されます。複数選択できる「チェックボックス」の場合は各値が「\0」で区切られて格納されます。ライブラリを読み込みます。発生させるにはrandを使います。0から引数の範囲で乱数を発生します。乱数は小数点以下を含みます。引数を省略すると0〜1の範囲になります。randで生成する乱数の種をセットします。最近のPerlでは不要のようです。"$data<br>";}■実行結果9.021301269531251.71936035156255.0476074218752.567443847656257.177734375暗号化パスワードなどの文字列を暗号化するにはcryptを使います。暗号化の種を使って文字列を暗号化します。種は任意の英数字2文字を指定します。暗号化された文字列の先頭2文字は種になります。←パスワード1234を種abで暗号化する。パスワードの照合は、入力されたパスワードを同じ種で暗号化して照合します。下記で、cryptは$passの先頭2文字を自動的に読み取ります。