ライブラリを使わないマルチバイト文字操作
久しぶりにやったら混乱したのでメモ。
文字コード関連のライブラリを使わないで、マルチバイト文字を操作する場合の注意。例えば、SJISで書かれた以下のファイルがあるとき、
1と2と3 と4と5と
「と」を全て削除する場合、
while (<>) { s/と//g; print; }
$ perl a.pl < sjis.txt 123 45 $
となりますが、ソースコードはSJISでなければなりません。もし、ソースコードがEUC-JPで書かれていると期待した動作になりません。
ソースコードがEUC-JPで、データはSJISの場合は、
while (<>) { s/\x82\xC6//g; print; }