hello imhacked and welcome to the monastery and to the wonderful world of Perl!
choroba gave you the solution: but why use isdigit when you can already match directly digits with \d classe in regexes?
I gave a try to this never used by me module ending with the below oneliner: For sure is not the best thing ever seen ( PS indeed! see tremendously wise AnomalousMonk below) but you can play with it (be aware of the win32 double quotes!):
echo 1st rule: 2nd, 3rd and 4th floor must be free in 5 min. Not in 6.
+ Call 911 for emergencies |
perl -MLingua::EN::Numbers="num2en,num2en_ordinal" -pne "s/(\d+)([st|n
+d|rd|th])+/num2en_ordinal($1)/ge;s/(\d+)/num2en($1)/ge"
first rule: second, third and fourth floor must be free in five min. N
+ot in six. Call nine hundred and eleven for emergencies
You can use MO=Deparse to see the above a bit expanded:
perl -MO=Deparse -pne "s/(\d+)([st|nd|rd|th])+/num2en_ordinal($1)/ge;
+s/(\d+)/num2en($1)/ge"
LINE: while (defined($_ = <ARGV>)) {
s/(\d+)([st|nd|rd|th])+/num2en_ordinal($1);/eg;
s/(\d+)/num2en($1);/eg;
}
continue {
die "-p destination: $!\n" unless print $_;
}
-e syntax OK
PPS maybe this is better regex (i'm so rusty..), the char class [..] was totally misplaced, but being all look around assertions zero width ones ( $& not filled ) a simple capturing group seems to work:
s/(\d+)(st|nd|rd|th)/num2en_ordinal($1)/ge
L*
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
|