綾小路龍之介の素人思考

[perl] 半角全角の相互変換には Unicode::Japanese が便利

半角を全角に変換するには h2z、全角を半角に変換するには z2h を使う。

$ echo 'test' | perl -MUnicode::Japanese -lne 'print Unicode::Japanese->new($_)->h2z->get;'
test
$ echo 'test' | perl -MUnicode::Japanese -lne 'print Unicode::Japanese->new($_)->z2h->get;'
test

行数の多いファイルを読み込む場合の効率考えれば 1 行ごとに Unicode::Japanese->new() を呼び出すのはちょっともったいないような気もする。少し長くなるけど、以下のようにしてみる。

$ cat | perl -MUnicode::Japanese -lne 'BEGIN{$s = Unicode::Japanese->new();} print $s->set($_)->h2z->get;'
1
1
#
#
+
+
^C

便利といっても、Unicode::Japanese の導入が必要。半角全角の対応をいちいち書き下す手間を気にならなければ以下のようにもできる。この場合は utf8 モジュールが必要だけど、これは標準モジュール。

$ echo '0123' | perl -Mutf8 -lpe 'tr/0-9/0-9/; utf8::encode($_);'
0123
$ echo '0123' | perl -Mutf8 -lpe 'BEGIN{binmode STDOUT, ":utf8";} tr/0-9/0-9/;'
0123

リファレンス

  1. Unicode::Japanese - search.cpan.org
  2. 半角←→全角変換,Unicode::Japanese に未公開機能が… - daily dayflower

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2008-11-23T15:42:02+09:00
  2. Modified: 2008-11-23T15:42:02+09:00
  3. Generated: 2017-03-17T23:09:15+09:00