素直に、EUC漢字コードを利用すれば良いような気がしますが。。。
漢字をプログラムで認識させる。と言うのは結構厄介です。人間は全体を一度に見ることができるので、それを漢字と認識しますが、プログラムでは左端から1バイトづつ見ていくので、それが漢字の一部分なのか、そうでは無いのかが、判断しにくいからです。
一文字づつ区切って見るのが一番手っ取り早いかな。と思います。
$s = '飯能申込表示';
$r = &add_yen($s);
print $r. "\n";
exit(0);
sub add_yen {
my($s) = @_;
my($r, $i, $c);
$r = "";
for $i (0 .. length($s)-1) {
$c = substr($s, $i, 1);
$r .= $c;
if ($c eq "\\") {
$r .= $c;
}
}
($r);
}
ただし、この処理は、漢字を漢字として認識させる処理を省いて、簡便な処理にしてあるので、完全なものでは無いと思います。(全角文字と半角文字が混在すると、誤動作する可能性があると思います。)
また、
$s = '飯能申込表示';
は定義できても、
$s = '申込表示飯能';
は定義できません。(能の2バイト目が \ なので、' がエスケープされてしまう。)
ファイルから取り込む分には問題ないと思いますが。
初めにも書きましたが、この様な面倒な問題に拘るより、EUC-JP でコードを書いてしまった方が何倍か楽になる様な気がします。
お礼
ありがとう御座います。 おおっ! そうなのですか! EUCコードには、\の混じる文字が無いのですね!!! 感動です! それも私は初耳なので、非常に勉強になります。 独学とはなんと遠回りなものか、パソコン利用歴13年にして、この有様。 (ついでに、いまだにブラインドタッチ出来ず、かな打ちなので、ローマ字打ちできません。トライしたりしていますが、挫折して…。ついでに、かな入力とローマ字入力の切り替えがAlt+平仮名で出来ることを最近知りました。) しかし、それだけにシフトJISからは離れがたいものがあり、ご教示いただいたコードを試させていただきましたら、ファイルから取り込み、ファイルに書きだす場合は、半角が入っても正しく動作します。 …というより、全部半角でやっているからこそ、正しい処理が出来るのかな??? > 能の2バイト目が \ なので、' がエスケープされてしまう。 多分、それが正しいのだと思います。どうやっても、漢字の真ん中には、\は入れられませんし、入れても、同じ\\ですから、後に入れても先に入れても同じで、次の文字がおかしくならないようにしたのでよい場合もあると思いますので…。