http://www.perlmonks.org?node_id=28989


in reply to RE: Re: Number to Speech
in thread Number to Speech

If you've got the ordinal then the cardinal is relatively easy, just roll your own. something like:
#!/usr/bin/perl -w use strict; my @examples = ("one", "two", "three", "nine", "twenty", "one hundred and three", "one thousand", "one thousand two hundred", "eighth thousand seven hundred and fifty seven"); for my $cardinal (@examples) { my $ordinal = ordinalise($cardinal); print "$ordinal\n"; }; sub ordinalise { my $str = shift; my @arr = split " ", $str; my $word = pop @arr; my %ord = ("one" => "first", "two" => "second", "three" => "third", "four" => "fourth", "five" => "fifth", "six" => "sixth", "seven" => "seventh", "eight" => "eighth", "nine" => "ninth", "ten" => "tenth", "eleven" => "eleventh", "twelve" => "twelfth"); { $word =~ s/ty$/tieth/ and next; $word = $ord{$word} and next if defined $ord{$word}; $word .= "th"; } push @arr, $word; return join(" ", @arr); };

Nuance