+# 今回のように、スクリプト内に直接マルチバイト文字(日本語の全角文字など)を
+# スクリプト内に書かれたマルチバイト文字(日本語の全角文字など)を標準出力する
+use Encode qw/encode_utf8/;
+# 0〜99までの数字を漢数字を受け取ってアラビア数字にする
+ = ('一', '二', '十', '十一', '三四', '二十一', '三十四', '三十', '三〇');
+for my $kan_suuji (@array){
+ # 回答のアラビア数字用のスカラー変数を用意します
+ my @array = split // , $kan_suuji;
+ # 分割すると今回の条件では3パターンに分かれる
+ # 1文字(配列の要素が1つ):'一', '二', '十'
+ # 2文字(配列の要素が2つ):'十一', '三四', '三十', '三〇'
+ # 3文字(配列の要素が3つ):'二十一', '三十四'
+ # 1文字(配列の要素が1つ):'一', '二', '十' のとき
+ if (scalar @array == 1){
+ my $kan_suuji = shift @array;
+ $answer = $hash{$kan_suuji};
+ # 2文字(配列の要素が2つ):'十一', '三四', '十一', '三〇' のとき
+ elsif(scalar @array == 2){
+ # 十の位, 一の位のアラビア数字を格納する変数を用意します
+ my $itchi_no_kurai = 0;
+ # ここで注意が必要なのが、十一 と 三十 と三四 です
+ # 漢数字の 十 が 「十の位にある」「一の位にある」「含まれない」パターンがあります
+ # 十の位に 漢数字の 十 が入っている場合には 10 〜 19 のアラビア数字になるはずです
+ # 一の位は 1文字の漢数字と同じようにハッシュテーブルで処理します
+ $itchi_no_kurai = $hash{$array[1]};
+ $answer = $jyuu_no_kurai + $itchi_no_kurai;
+ elsif($array[1] eq '十'){
+ # 一の位に 漢数字の 十 が入っている場合には 10 20 30 40 .. 90 のアラビア数字になるはずです
+ # このため、十の位の数字をハッシュテーブルか取得し、
+ $answer = $hash{$array[0]} * 10;
+ elsif($array[0] ne '十' && $array[1] ne '十'){
+ # ハッシュテーブルから数字をもってきて、それを計算します
+ $answer = $hash{$array[0]} * 10 + $hash{$array[1]};
+ # 3文字(配列の要素が3つ):'二十一', '三十四' のとき
+ elsif(scalar @array == 3){
+ # ハッシュテーブルから数字をもってきて、それを計算します
+ $answer = $hash{$array[0]} * 10 + $hash{$array[2]};
+ print encode_utf8($kan_suuji) . " => " . $answer . "\n";