utf8環境でperl::Jcodeのtrが使えないとき
perlのutf8の環境で カタカナ<=>ひらがなに変換するときにつかう Jcodeのtr関数。
use Jcode;
print new Jcode("あいうえおぁぃぅぇぉ","utf8")->tr('ぁ-ん','ァ-ン')->utf8;
# 結果:あいうえおぁぃぅぇぉ ←変換されてない×
サンプルどーりにやっても、そのへんに転がってるソースどおりにやっても
なぜかutf8環境でやってもならないし
なんで使えないんだろうなー?って思ってあきらめてたけど
use Jcode;
print new Jcode("あいうえおぁぃぅぇぉ","utf8")->tr(map {new Jcode($_)->euc}('ぁ-ん','ァ-ン'))->utf8;
# 結果:アイウエオァィゥェォ ←変換された◎
ってやったらできた。
要はtrの中の文字のエンコードをeucにしないとだめらしい。なーんだ単純
追記 11.6.11
perl - 勝手に添削 - utf8環境でperl::Jcodeのtrが使えないとき
dan様に添削されてたw 感謝m(_ _)m
use utf8;
my $str = "あいうえおぁぃぅぇぉ";
$str =~ tr/ぁ-ん/ァ-ン/;print $str;
# 結果:アイウエオァィゥェォ
わほー、シンプルになった