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;
# 結果:アイウエオァィゥェォ

わほー、シンプルになった

ひらがな=>半角の場合

黒魔術の力技みたけど、ちょっと複雑すぎてポカーンだったw
ブクコメに指摘があったように 「use utf8」を使えば Jcode::trは正常に動くのかーなるほど!>@n2sさん感謝

use Jcode;
use utf8;

print new Jcode("ぼくははんかくがだいすきですぐへへ")->tr("ぁ-ん","ァ-ン")->z2h->utf8();
## 結果:ボクハハンカクガダイスキデスグヘヘ

これがシンプルだし憶えやすいから今後はこれ使いそうな予感。use Jcodeはやっぱり大好き。dan様ありがとう