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
|