2014/01/01(水)PerlのUnicode::Numberによる数値漢数字,大字 変換メモ
コード:
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use open qw/:utf8 :std/;
use feature qw/say/;
use Unicode::Number;
my $u = Unicode::Number->new;
my @number_system_list = qw/
Japanese_Regular_Simplified
Japanese_Regular_Traditional
Japanese_Legal_Simplified
Japanese_Legal_Traditional
Japanese_Western_Mixed
/;
for my $number_system (@number_system_list)
{
say $u->number_to_string($number_system, '1234567890');
}
say "\n";
for my $number_system (@number_system_list)
{
say $u->string_to_number($number_system, '壹拾貳億參仟肆百伍拾陸萬柒仟捌百玖拾')->to_string;
}
# segmentation fault が発生する
#say $u->string_to_number('Japanese_Regular_Simplified', '123');
say $u->number_to_string('Japanese_Regular_Simplified', '123');
say "Yay!";
実行結果:
十二億三千四百五十六万七千八百九十
十二億三千四百五十六萬七千八百九十
壱十弐億参仟四百五十六萬七仟八百九十
壹拾貳億參仟肆百伍拾陸萬柒仟捌百玖拾
12億3,456万7,890
1234567890
1234567890
1234567890
1234567890
1234567890
Not a decimal number: must contain 0-9 at /home/***/Unicode/Number.pm line 43.
という感じで想定外の入力を渡すと死ぬようです。(Unicode::Number Ver. 0.005)
ちなみに「Japanese_Regular_Simplified」みたいなのは「Unicode::Number::System」のSYNOPSISのコードを実行させると出ます。