in reply to Re^2: Golf - Ordinal Suffixes
in thread Golf - Ordinal Suffixes

Your way to shave a character (/msg'd) and my way are different, thus we can get it down to 34:
sub num2ord { local $_ = shift; # 1 2 3 4 # 123456789012346789012345678901234567890 $_.(qw(0 st nd rd)[/1?\d$/g]||th) }

Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

Replies are listed 'Best First'.
Re^4: Golf - Ordinal Suffixes
by sauoq (Abbot) on Oct 27, 2005 at 05:02 UTC

    We're assuming good input anyway, so we can shave another off...

    sub num2ord { local $_ = shift; # 1 2 3 4 # 123456789012346789012345678901234567890 $_.(qw(0 st nd rd)[/1?.$/g]||th) }
    Which drops us to 33.

    -sauoq
    "My two cents aren't worth a dime.";
    

      One bareword hardly seems enough:

      sub num2ord { local $_ = shift; # 1 2 3 4 # 123456789012346789012345678901234567890 $_.((0,st,nd,rd)[/1?.$/g]||th) }

      Update: oops, typo: too many parens at start.

      Hugo

        sub num2ord { local $_ = shift; # 1 2 3 4 # 1234567890123**789012345678901234567890 $_.((0,st,nd,rd)[/1?.$/g]||th) }
        Those ** should be 456, not 46 - that appears to have been copied by everyone ;)

        Also, one extra character can be removed:
        sub num2ord { local $_ = shift; # 1 2 3 # 123456789012345678901234567890 $_.=(0,st,nd,rd)[/1?.$/g]||th }