package numeral;

sub card2ord {

   my $num = shift @_;

   if ($num =~ m/^[\d,]+$/) {

      $num =~ s/(1[123])$/$1th/
         or
      $num =~ s/([0123])$/(qw|0th 1st 2nd 3rd|)[$1]/e 
         or
      $num .= 'th';

   } else {

      my %ord = qw /one    first     One    First     ONE    FIRST
                    two    second    Two    Second    TWO    SECOND
                    three  third     Three  Third     THREE  THIRD
                    five   fifth     Five   Fifth     FIVE   FIFTH
                    eight  eighth    Eight  Eighth    EIGHT  EIGHTH
                    nine   ninth     Nine   Ninth     NINE   NINETH
                    twelve twelfth   Twelve Twelfth   TWELVE TWELFTH
                    y      ieth                       Y      IETH/;

      $num =~ s/(one|two|three|five|eight|nine|twelve|y)$/$ord{$1}/ie 
         or
      $num =~ s/([A-Z])$/${1}TH/
         or
      $num .= 'th';

   }

   return $num;

}

1;