#!/usr/bin/perl -w
use strict;
my @numnames = (qw/ zero fir seco thi four fif six seven eigh nin /);
my @teennames = (qw/ ten eleven twelf thirteen fourteen fifteen sixteen seventeen eighteen ninteen /);
my @decnames = ('', qw/ ten twenty thirty forty fifty sixty seventy eighty ninety /);
my @suffixes = (qw/ th st nd rd /, ('th') x 6);
foreach my $num (@ARGV) {
print &hr_place($num), "\n";
}
sub hr_place {
my ($n) = @_;
my ($suf, $nm, $ten_suf, $ten_nm) = ('') x 4;
if ($n =~ /1(\d)$/) {
# 10-19 get 'th' suffix
$suf = 'th';
$nm = $teennames[$1];
} else {
# not a teen
if ($n =~ /(\d)0$/) {
# perform translation ('twenty' => 'twentie')
($ten_nm = $decnames[$1]) =~ s/y$/ie/;
$ten_suf = 'th';
} else {
$ten_nm = $decnames[($n / 10) % 10];
$ten_suf = length $ten_nm ? '-' : '';
$suf = $suffixes[$n % 10];
$nm = $numnames[$n % 10];
}
}
($ten_nm, $ten_suf, $nm, $suf)
}
__END__
use strict;
my @numnames = (qw/ zero fir seco thi four fif six seven eigh nin /);
my @teennames = (qw/ ten eleven twelf thirteen fourteen fifteen sixteen seventeen eighteen ninteen /);
my @decnames = ('', qw/ ten twenty thirty forty fifty sixty seventy eighty ninety /);
my @suffixes = (qw/ th st nd rd /, ('th') x 6);
foreach my $num (@ARGV) {
print &hr_place($num), "\n";
}
sub hr_place {
my ($n) = @_;
my ($suf, $nm, $ten_suf, $ten_nm) = ('') x 4;
if ($n =~ /1(\d)$/) {
# 10-19 get 'th' suffix
$suf = 'th';
$nm = $teennames[$1];
} else {
# not a teen
if ($n =~ /(\d)0$/) {
# perform translation ('twenty' => 'twentie')
($ten_nm = $decnames[$1]) =~ s/y$/ie/;
$ten_suf = 'th';
} else {
$ten_nm = $decnames[($n / 10) % 10];
$ten_suf = length $ten_nm ? '-' : '';
$suf = $suffixes[$n % 10];
$nm = $numnames[$n % 10];
}
}
($ten_nm, $ten_suf, $nm, $suf)
}
__END__
And that's how you do it. Works with any number up to 99.
If you found this code useful, leave a comment/suggestion.