sub num { my $n = shift; my @e1 = (undef, qw(one two three four five six seven eight nine)); my @e10 = qw(ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen); my @e99 = qw(undef undef twenty thirty forty fifty sixty seventy eighty ninety); if ($n < 10) { return $e1[$n]; } if ($n < 20) { return $e10[$n % 10]; } if ($n < 100) { if ($n % 10 == 0) { return $e99[$n / 10]; } return $e99[$n / 10] .'-' . num($n % 10); } if ($n < 1000) { if ($n % 100 == 0) { return num($n / 100) . ' hundred'; } return $e1[$n / 100] . ' hundred and ' . num($n % 100); } return "one thousand"; } $s = 0; for ($i = 1; $i <= 1000; ++$i) { $n = num($i); $n =~ s/[\s\-]//g; print "$i: $n\n"; $s += length($n); } print $s;