Strtol

Score: 222.53 (pass)

#!perl -lap
sub F{my$x;++$x,$_[0]=~/$_/&&last for
qw{on wo th fo f x s g i te ev t}}$t+=$b=$c*(/b/?1e9:/m/?1e6:/a/?1e3:0),$c=$b?0:/d/?$c*100:/y/?$c+10*F($_)%100:/een/?$c+10+F$_:$c+F$_
for@F;$_=$t+$c;0while s/(?<=\d)...(?!\d)/,$&/

Score: 229.55 (pass)

#!perl -lp
sub F{my$x;$x++,$_[0]=~/$_/&&return$x
for qw{on wo th fo f x s g i te ev t}}$t+=$b=$c*(/b/?1e9:/m/?1e6:/a/?1e3:0),$c=$b?0:/d/?$c*100:/y/?$c+10*F($_)%100:/een/?$c+10+F$_:$c+F$_
for split;$_=$t+$c;0while s/(?<=\d)...(?!\d)/,$&/

Score: 259.53 (pass)

#!perl -lp
sub F{my$x;$x++,$_[0]=~/$_/&&return$x
for qw{on wo th fo f x s g i te ev t}}/b/?($t=1e9*$c,$c=0):/m/?($t+=1e6*$c,$c=0):/a/?($t+=1e3*$c,$c=0):/d/?$c*=100:/y/?$c+=10*F($_)%100:/een/?$c+=10+F$_:($c+=F$_)for
split;$_=reverse$t+$c;s/...(?=.)/$&,/g,$_=reverse$_

Score: 268.54 (pass)

#!perl -lp
sub F{my$x;($x++,!index$_[0],$_)&&return$x
for qw{o two th fo f si s ei n te e t}}/b/?($t=1e9*$c,$c=0):/m/?($t+=1e6*$c,$c=0):/ho/?($t+=1e3*$c,$c=0):/^h/?$c*=100:/ty/?$c+=10*F($_)%100:/een/?$c+=10+F$_:($c+=F$_)for
split;$_=reverse$t+$c;s/...(?=.)/$&,/g,$_=reverse$_

Score: 587.55 (pass)

150 strokes ?!? Clearly I've overlooked something major...

I believe you have

#!perl -lp
$m={zero=>0,one=>1,two=>2,three=>3,four=>4,five=>5,six=>6,seven=>7,eight=>8,nine=>9,ten=>10,eleven=>11,twelve=>12,thirteen=>13,fourteen=>14,fifteen=>15,sixteen=>16,seventeen=>17,eighteen=>18,nineteen=>19,twenty=>20,thirty=>30,forty=>40,fifty=>50,sixty=>60,seventy=>70,eighty=>80,ninety=>90};$C=',';sub
c{$_=pop;s/(.*) hundred ?(.*)?/100*c($1)+c($2)/e||s/(\w+) ?(\w+)?/$m->{$1}+$m->{$2}/e||s//0/;$_='0'x(3-length).$_ if$x;$_}s/(.*) billion ?/($x.=c($1).$C),""/e;s/(.*) million ?/($x.=c($1).$C),""/e||$x&&($x.="000,");s/(.*) thousand ?/($x.=c($1).$C),""/e||$x&&($x.="000,");$_=$x.c($_)