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のコードを実行させると出ます。