26. 実際、こんな感じで調べて小切手を切った
three hundred and eighty-nine million, three
thousand, eight hundred and ninety-seven
#!/usr/bin/env
perl
use
strict;
use
warnings;
use
Lingua::EN::Numbers
qw(num2en);
print
num2en(389003897),
"n";
36. 日韓英の数字読み
#!/usr/bin/env
perl
use
strict;
use
warnings;
use
utf8;
use
UNIVERSAL::require;
binmode
STDOUT,
':utf8';
my
$voices
=
+{
ja
=>
‘kyoko',
ko
=>
'yuna',
en
=>
‘allison',
};
my
$lang
=
'en';
while
(1)
{
my
$input
=
prompt($lang);
if
($input
=~
/^(?:ko|ja|en)$/i)
{
$lang
=
lc($input);
print
"language
is
changed
to
$lang.n";
next;
}
if
($input
=~
/d/)
{
my
$module
=
sprintf
"Lingua::%s::Numbers",
uc($lang);
$module-‐>use()
or
die
$@;
my
$func
=
&{"$module::num2$lang"};
my
$num
=
$func-‐>($input);
print
$num,
"n";
system('/usr/bin/say',
'-‐v',
$voices-‐>{$lang},
$num)
&&
die
$^E;
}
}
sub
prompt
{
my
$lang
=
shift;
print
"$lang>
";
chomp(my
$input
=
<STDIN>);
return
$input;
}
37. もっと世界のナベアツ
#!/usr/bin/env
perl
use
strict;
use
warnings;
use
utf8;
use
UNIVERSAL::require;
binmode
STDOUT,
':utf8';
(my
$lang
=
$ARGV[0]
||
'en')
=~
/^(?:ko|ja|en)$/i
||
die
"Usage:
$0
[
ko
|
ja
|
en
]n";
my
$module
=
sprintf
"Lingua::%s::Numbers",
uc($lang);
$module-‐>use()
or
die
$@;
$lang
=
lc($lang);
my
$convert_func
=
&{"$module::num2$lang"};
my
$voices
=
+{
ja
=>
'kyoko',
ko
=>
'yuna',
en
=>
'allison',
};
for
my
$num
(1
..
40)
{
my
$number;
my
$cur_lang;
if
($num
%
3
==
0
||
$num
=~
/3/)
{
$number
=
$convert_func-‐>($num);
$cur_lang
=
$lang;
}
else
{
$number
=
$num;
$cur_lang
=
'en';
}
print
$number,
"n";
system('/usr/bin/say',
'-‐v',
$voices-‐>{$cur_lang},
$number)
&&
die
$^E;
}