Perl で半角カナと全角カナの変換をする

Perl を使って半角カタカナと全角カタカナの変換をするスクリプトを、標準モジュールの Encode.pmUnicode::JapaneseLingua::JA::Regular::Unicode を使ってそれぞれ変換スクリプトを書いてみる。

まずは、標準モジュールの Encode.pm を使った場合。
変換を文字コード euc-jp で行うために、変換前と変換後に utf-8 との文字コード変換を行う必要があった。

use Encode;
use Encode::JP::H2Z;

my $str_z = "Hello World.全角カタカナデス。 12345 67890";
my $str_h = "Hello World.全角カタカナデス。 12345 67890";

# 全角カナ→半角カナ
Encode::from_to($str_z, "utf-8", "euc-jp");
Encode::JP::H2Z::z2h($str_z);
Encode::from_to($str_z, "euc-jp", "utf-8");
print $str_z, "\n"; # => Hello World.全角カタカナデス。 12345 67890

# 半角カナ→全角カナ
Encode::from_to($str_h, "utf-8", "euc-jp");
Encode::JP::H2Z::h2z($str_h);
Encode::from_to($str_h, "euc-jp", "utf-8");
print $str_h, "\n"; # => Hello World.全角カタカナデス。 12345 67890

次に、Unicode::Japanese モジュールを使った場合。
z2h, h2z 関数ではカタカナ以外も変換されてしまうため、カタカナのみの変換には z2hKana, h2zKana 関数を使う必要があった。
参考:半角←→全角変換,Unicode::Japanese に未公開機能が… – daily dayflower

use Unicode::Japanese;

my $str_z = "Hello World.全角カタカナデス。 12345 67890";
my $str_h = "Hello World.全角カタカナデス。 12345 67890";

print Unicode::Japanese->new($str_z)->z2h->get, "\n"; # => Hello World.全角カタカナデス。 12345 67890
print Unicode::Japanese->new($str_h)->h2z->get, "\n"; # => Hello World.全角カタカナデス。 12345 67890
print Unicode::Japanese->new($str_z)->z2hKana->get, "\n"; # => Hello World.全角カタカナデス。 12345 67890
print Unicode::Japanese->new($str_h)->h2zKana->get, "\n"; # => Hello World.全角カタカナデス。 12345 67890

最後に、Lingua::JA::Regular::Unicode を使った場合。
use utf8; しないと動作しなかった。

use utf8;
use Lingua::JA::Regular::Unicode;

my $str_z = "Hello World.全角カタカナデス。 12345 67890";
my $str_h = "Hello World.全角カタカナデス。 12345 67890";

print encode("utf-8", katakana_z2h($str_z)), "\n"; # => Hello World.全角カタカナデス。 12345 67890
print encode("utf-8", katakana_h2z($str_h)), "\n"; # => Hello World.全角カタカナデス。 12345 67890
ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 279701
«
»