一般的にWindowsやMacのパソコンでは日本語の文字コードにシフトJISが使われています。CGIプログラムをシフトJISで記述すると文字化けやエラーを起こす場合や正規表現が正常に実行されない場合があります。原因は、日本語が1文字2バイトのコードで表されますが、その2バイト目がPerlの特殊文字に重複したり正規表現にマッチしたりする為です。以下に問題点の内容と対策を示します。日本語のシフトJISで2バイト目がPerlの特殊文字に重複すると文字化けが起きる場合があります。文字コードにEUCを使えば重複しないので文字化けは起こりません。2バイト目が\の文字2バイト目がシフトJISで「5C」になる文字は「\」を表し、「\」はメタ文字に解釈される為、2バイト目は次の文字コードになります。従って、その該当文字及び次の文字が化けてしまいます。その為、特に文字列の最後に上記の文字を記述すると文法エラーを引き起こします。(「ソ」「表」の2バイト目が\)2バイト目が「\」になる主な文字を下記に示します。対策を下記に示します。・上記の文字の直後に「\」を付けます。これによってメタ文字に解釈される「\」を補います。"予\定"・シングルクォート文字列を使います。'予定'但し、文字列の最後に上記の文字を記述すると「\'」になる為、「'」が文字列に含まれてしまい文法エラーになります。その場合は「\」を付けます。2バイト目が@の文字2バイト目が「@」になる文字は、その次の文字に配列変数で使われる文字又は数字があると配列に解釈されて文字化けが起きます。(「法」の2バイト目が@)2バイト目が「@」になる主な文字を下記に示します。対策はシングルクォート文字列を使います。正規表現に日本語を使う場合は下記のような問題があります。日本語の2バイト目に正規表現で使う文字があると正しく実行されなかったり、文法エラーが起きたりします。フォーム入力のデータを正規表現に使う場合は、入力データによってエラーが起きたり起きなかったりするので注意が必要です。文法エラーになります。この文を実行した時にエラーになります。対策はメタ文字\Q\Eを使います。これは\Qから\Eまでの非英数文字の前に\を付けます。1バイトずれで誤ってマッチしてしまう場合2バイト目又はそれ以降のバイトずれした文字は誤ってマッチしてしまう場合があります。マッチしてしまいます文字コードがEUCでもバイトずれによってマッチしてしまう場合があります。対策は1文字毎のバイト長を認識させればいいですが複雑になるので割愛します。正規表現で記述する文字長が大きければ誤ってマッチする可能性は低くなります。一致サブルーチンサブルーチンはsubで定義します。呼び出しは&を付けます。引数は配列@_に自動的に格納されます。myは変数名をサブルーチン内だけで有効にします。"今日は$mon月$day日です。";}サブルーチンの結果をreturn文で返すことができます。サブルーチンの実行はreturn文で終了します。return文がない場合はサブルーチンの最後の式の値を返します。"明日は$mon月$day日です。"明日は$mon月$day日です。"今日は3月31日です。"今日は$_[0]月$_[1]日です。"今日は$mon月$day日です。"今日は$mon月$day日です。今日は3月31日です。今日は3月31日です。今日は3月31日です。明日は3月31日です。今日は3月31日です。35ファイル入出力ファイルの入出力にはファイルハンドルを使います。ファイルハンドルは入出力の対象となるファイルに付けた任意の名前で、Perl予約語と区別する為、英大文字にします。特別なファイルハンドルとして標準入力STDIN、標準出力STDOUTがあります。標準出力はブラウザになります。ファイルハンドルを作成し、指定したファイルに関連付けます。