0: package pronounce_number;
1:
2: # Package Stuff.
3: use Exporter;
4: @ISA=(Exporter);
5: @EXPORT=('pronounce_number', 'set_format');
6:
7: my @v = ( [ '', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
8: 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'],
9: [ '', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety' ]);
10: my @m = ('', ' million', ' billion', ' trillion', ' quadrillion', ' quintillion');
11: my @g = ('', ' thousand');
12: my @h=('',' hundred');
13: my @and=('',' and ');
14:
15: my %format = ( space=>'', point=>'point');
16:
17: sub set_format {
18: %format = @_;
19: }
20:
21: sub integer_grammar($) {
22: my ($u,$t,$h) = reverse(split//,$_[0]);
23: return $v[0]->[$h].$h[!!$h].$and[!!($h&&($t||$u))].$v[!(1==$t&&($u+=10)&&($t=0))]->[$t].$format{'space'}.$v[0]->[$u];
24: }
25:
26: sub float_grammar($) {
27: $_[0]=~s/(\d)/$v[0]->[$1] /geo;
28: return $_[0];
29: }
30:
31: sub magnitude_grammar {
32: return $g[(($_[0]-1)/3)%2].$m[$_[0]/6 * !!($_[0]%6)].' ';
33: }
34:
35: sub pronounce_integer($) {
36:
37: $_=join("",(reverse(split//,$_[0])));
38: my ($i,$n,@l)=(0,"",());
39: foreach $n(/(\d{1,3})/g) {
40: $n=join("",(reverse(split//,$n)));
41: $i+=length($n);
42: push @l,($n && defined(@l))?magnitude_grammar($i):"",integer_grammar($n);
43: }
44: return join('',reverse(@l));
45: }
46:
47: sub pronounce_float($) {
48: my @n=split/\./,$_[0];
49: return pronounce_integer($n[0])." $format{'point'} ".float_grammar($n[1]);
50: }
51:
52: sub pronounce_ip($) {
53: return join(" $format{'point'} ",map{pronounce_integer($_)}(split/\./,$_[0]));
54: }
55:
56: my @process_array=(\&pronounce_integer,\&pronounce_float,\&pronounce_ip);
57:
58: sub pronounce_number($) {
59: my $string = $_[0];
60: $string =~ s/,//g;
61: $_ = ($string =~ s/\./\./g);
62: return &{$process_array[($_<=$#process_array)?$_:2]}($string)
63: } In reply to Grammatical Pronunciation of numbers. by frankus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |