●●1~7で現時点で明瞭かつ確言できる注意点留意点をメモ書きしておく。8以下の旧版にグダグダ書き綴った事柄は経験的ではあるけれど誤りを含む未整理なメモ。画面(web)出力をdecode文字列のみとせよ。いう記述は誤りである。指定し保存されるべきである。$myEnKeyをデコードして$myDeKeyに保存する。$myDeKeyをエンコードして$myEnKeyに保存する。4スクリプトの内部処理はすべてdecode文字列に統一し処理する。文字列に変換した後に行う。・スクリプト内で定義される定数文字列はすべてdecode文字列である。・文字化けはencode/decode文字列の混在出力が原因である。decode/encode文字列を不注意に混在連結させてはならない。・内部処理途中のdecode文字列のまま表示orファイル出力しない。encodeし直したあとで出力する。・間に合わせ的にとりあえず出力した文字列がブラウザで正常表示されたとしても以下の潜在的問題があることを忘れてはならない。・ssh端末でdecode文字列を表示させるとWide文字列に遭遇したという警告が多数表示され結果、狭い表示枠がノイジーで読み辛くなる。HTTPサーバのログがssh端末同様にWide文字列使用の警告で埋め尽くされる。・内部処理途中のhashはdecode文字列を使用する。decode未処理=encode文字列に対する文字列操作こそが文字化けの原因。・UTF8では純粋なASCIIだけの文字列はdecode/encode処理と無関係であるかのごとく文字化けしない。理由はそれが1BYTEコードであるから。decode文字列をキー使用すると日本語コード(3-byte)が原因でクラッシュする。・CPAN由来の外部ファイルを独自に読み込むようなPackageは処理結果をencode文字列として返すことが多い。文字列それぞれの区分を明瞭明確に示す変数記法を定義使用する。・もちろんスクリプトの記法は好みの問題であるから任意・マイルールでかまわない。$myDexxxxxxxxと記述することを常としている。処理は意外とオーバーヘッドが大きい。処理ループでこまめに多用すると処理速度が遅くなる。処理は入力と出力の時に一括して一回限りで済ませることが望ましい。7サンプル・コードcsvファイルを読み込みDBハッシュに登録保存するコードのサンプル例。大手サイトのホームページでも当初はシフトJISやEUCで記述されるのが普通だったが、今ではほとんどがUTF8に移行している。UTF8に対応している。Apacheベースのperl-CGIを記述する際、「UTF8/LFのみ」でコード保存すればUTF8の移行は単純に完了する。CGI記述は、UTF8で記述保存するのがふつうだろう。jcode.plはもはや過去の遺物。utf8が普通に使える。5.8.8で検証確認した現象と対策。perlの新バージョンや将来の改版で事態が異なることが起こるかもしれません。標準perl関数を用い任意の文字列を抜き出したり置換したりすると文字化けなど問題がドカッと現れてくる。utf8"の有無で大きく異なる。済ませ標準関数を利用しようとすると、指定した文字列で切り出しや変換が上手くできない。UTF8の文字1個を3個の文字とみなして処理を行ってしまうことに起因する。文字列は英数字混在であり得るから、単純に1文字3バイトで指定するようなみなし処理は解決にはならない。substrで1文字切り出しが1バイト切り出しと同義であるような場合、文字化けというより単にデータとは言えないゴミを表示しているだけに過ぎない。それにそもそも特殊文字は3バイトではない場合もありえる。指定せず利用しない方がよい。指定しなければ文字化けは生じない。単純なCGIならプレーンな記述で十分。メインソースで用いないプレーン記述こだわる手法もある。組み合わせてラップ関数を書いて使用局面でだけフラグの付け外しを行うという手法である。require文でインクルードする。foreach文の中で文字処理をループさせたりすると、ラップ関数それ自体が無駄な処理を多重生成する。いった欠点・無駄が生じる場合もある。指定をしたことで生じるUTF8文字化けは、perlがUTF8を扱うにあたって、2つのモードを使い分けていることによる。そのモードの1つはperl固有の内部フラグ有りflagged/デコーデッドなUTF8文字列。一つは外部データ的な内部フラグ無しunflagged/エンコーデッドなUTF8文字列。指定を行わず文字処理で標準関数を用いたりしなければ表示上文字化けは生じない。指定すれば、標準関数でUTF8文字列を指定通り正しく処理できる。UTF8/デコーデッド文字列に(decode)変換することが必須。(UTF8文字列を外部ファイルやDBに書き出してもふつうに読めるフラグ無し・外しのencode変換を行う)ここではフラグ付加がdecode(デコード)。フラグ外しがencode(エンコード)である。わたし的な語感では、加工変換がエンコードで解除変換がデコードという語感なのだが、真逆。戸惑いを増やすポイント。