#!/usr/local/bin/perl open (F, $ARGV[0]) || die "input file\n"; sub firstnum; sub secondnum; sub twodigit; sub onedigit; sub threedigit; sub fourdigit; while() { my $line = $_; #first add a space if encounter letter followed by a number $line =~ s/([A-Z|a-z])([0-9])/$1 $2/g; $line = fourdigit($line); #$line = threedigit($line); $line = twodigit($line); #zero is special, pronounced only in single #s/0/zero/g; $line = onedigit($line); print $line; } sub fourdigit { #four digit sequences my $line = shift; while ($line =~ /([2-9][0-9])([2-9][0-9][a-z]*)/) { $b1 = twodigit ($1); $b2 = twodigit ($2); #print "$b1$b2\n"; $line =~ s/[2-9][0-9][2-9][0-9][a-z]*/$b1$b2/; } return $line; } sub twodigit { my $line = shift; $_ = $line; #two digit sequences s/10/ten/g; s/11/eleven/g; s/12/twelve/g; s/13/thirteen/g; s/14/fourteen/g; s/15/fifteen/g; s/16/sixteen/g; s/17/seventeen/g; s/18/eighteen/g; s/19/nineteen/g; $line = $_; # a-z for th or rd while ($line =~ /([2-9])([0-9][a-z]*)/) { $a1 = firstnum ($1); $a2 = secondnum ($2); # print "twodigit: $a1$a2\n"; $line =~ s/[2-9][0-9][a-z]*/$a1$a2/; } return $line; } sub onedigit { $_ = shift; #substitute all numbers in spaces s/1st/first/g; s/2nd/second/g; s/3rd/third/g; s/5th/fifth/g; s/0//g; s/1/one/g; s/2/two/g; s/3/three/g; s/4/four/g; s/5/five/g; s/6/six/g; s/7/seven/g; s/8/eight/g; s/9/nine/g; #print $_; return $_; } sub firstnum { $_ = shift; s/2/ twenty /g; s/3/ thirty /g; s/4/ fourty /g; s/5/ fifty /g; s/6/ sixty /g; s/7/ seventy /g; s/8/ eighty /g; s/9/ ninety /g; return $_; } sub secondnum { $_ = shift; $line = onedigit($_); return $line; }