お約束
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode;
日本語を扱う可能性があるプログラムのすべて(つまり、文字列処理をするプログラムの全て)に書いておくと幸せになれるらしいです。
Perl内部のUTF-8とUTF-8
文字列がUTF-8ならUTF-8じゃないか?と思いがちですが、Perlには内部で扱う"flagged UTF-8"と"flaggedではないUTF-8" (文字列ではない) の二種類があることを覚えておきましょう。
文字列を扱う時は、Perl内部で扱うflagged UTF-8へdecodeで変換し、Perlの外部に出力する時にはencodeしてやる必要があります。例えば、ターミナルから入力されるひらがなをカタカナに変換する場合は、次のようになります。
use strict; use warnings; use utf8; use Encode; my $hoge = <>; my $decoded_hoge = decode_utf8($hoge); $decoded_hoge =~ tr/ぁ-ん/ァ-ン/; print encode_utf8($decoded_hoge);
これでたいていの処理は問題なくできるはずです。