README for Lingua::EN::Numbers::Ordinate
Time-stamp: "2000-08-24 16:59:23 MDT"
Lingua::EN::Numbers::Ordinate
[Partially excerpted from the POD.]
Lingua::EN::Numbers::Ordinate -- go from cardinal number (3)
to ordinal ("3rd")
SYNOPSIS
use Lingua::EN::Numbers::Ordinate;
print ordinate(4), "\n";
# prints 4th
print ordinate(-342), "\n";
# prints -342nd
# Example of actual use:
for(my $i = 0; $i < @records; $i++) {
unless(is_valid($record[$i]) {
warn "The ", ordinate($i), " record is invalid!\n";
next;
}
...
}
DESCRIPTION
There are two kinds of numbers in English -- cardinals (1,
2, 3...), and ordinals (1st, 2nd, 3rd...). This library
provides functions for giving the ordinal form of a number,
given its cardinal value.
FUNCTIONS
ordinate(SCALAR)
Returns a string consisting of that scalar's string
form, plus the appropriate ordinal suffix. Example:
ordinate(23) returns "23rd".
As a special case, ordinate(undef) and ordinate("")
return "0th", not "th".
This function is exported by default.
th(SCALAR)
Merely an alias for ordinate, but not exported by
default.
ordsuf(SCALAR)
Returns just the appropriate ordinal suffix for the
given scalar numeric value. This is what ordinate uses
to actually do its work. For example, ordsuf(3) is
"rd".
Not exported by default.
The above functions are all prototyped to take a scalar
value, so ordinate(@stuff) is the same as ordinate(scalar
@stuff).
CAVEATS
To pick a trivial example, consider that in French, 1
ordinates as "1ier", whereas 41 ordinates as "41ieme".
STILL NOT SATISFIED?
Bored of this...?
print th($n), " entry processed...\n";
...
Try this bit of lunacy:
{
my $th_object;
sub th () { $thobject }
package Lingua::EN::Numbers::Ordinate::Overloader;
my $x; # Gotta have something to bless.
$th_object = bless \$x; # Define the object now, which th returns
use Carp ();
use Lingua::EN::Numbers::Ordinate ();
sub overordinate {
Carp::croak "th should be used only as postfix!" unless $_[2];
Lingua::EN::Numbers::Ordinate::ordinate($_[1]);
}
use overload '&' => \&overordinate;
}
Then you get to do:
print 3 & _th, "\n";
# prints "3rd"
print 1 + 2 & _th, "\n";
# prints "3rd" too!
# Because of the precedence of & !
print _th & 3, "\n";
# dies with: "th should be used only as postfix!"
Kooky, isn't it? For more delightful deleria like this, see
Damian Conway's Object Oriented Perl from Manning Press.
Kinda makes you like th(3), doesn't it?
COPYRIGHT
Copyright (c) 2000 Sean M. Burke. All rights reserved.
This library is free software; you can redistribute it
and/or modify it under the same terms as Perl itself.
AUTHOR
Sean M. Burke sburke@cpan.org
[End of POD excerpt]
PREREQUISITES
This suite requires Perl 5; I've only used it under Perl 5.004, so for anything lower, you're on your own.
Lingua::EN::Numbers::Ordinate doesn't use any nonstandard modules.
INSTALLATION
You install Lingua::EN::Numbers::Ordinate, as you would install any perl module library, by running these commands:
perl Makefile.PL
make
make test
make install
If you want to install a private copy of Lingua::EN::Numbers::Ordinate in your home directory, then you should try to produce the initial Makefile with something like this command:
perl Makefile.PL LIB=~/perl
DOCUMENTATION
POD-format documentation is included in Ordinate.pm. POD is readable with the 'perldoc' utility. See ChangeLog for recent changes.
MACPERL INSTALLATION NOTES
You needn't bother with the makefiles. Just make a Lingua directory in your MacPerl site_lib or lib directory, an EN directory under that, and a Numbers directory under that, and move Ordinate.pm into there.
SUPPORT
Questions, bug reports, useful code bits, and suggestions for Lingua::EN::Numbers::Ordinate should just be sent to me at sburke@cpan.org
AVAILABILITY
The latest version of Lingua::EN::Numbers::Ordinate is available from the Comprehensive Perl Archive Network (CPAN). Visit <http://www.perl.com/CPAN/> to find a CPAN site near you.