#!/usr/bin/perl # list borrowed from http://www.codinghorror.com/blog/2008/06/ascii-pronunciation-rules-for-programmers.html my %chars = ( '!' => [qw(bang pling excl not shriek factorial exclam smash cuss boing yell wow hey wham eureka spark-spot soldier)], '"' => [qw(literal double-glitch dieresis dirk rabbit_ears double_prime)], '#' => [qw(hash crunch hex mesh grid pound sharp grid crosshatch octothorpe flash square tictactoe scratchmark thud thump splat pigpen)], '$' => [qw(dollar currency buck cash string ding cache big_money)], '%' => [qw(percent mod grapes 007)], '&' => [qw(amp amper and address reference andpersand bitand background pretzel)], "'" => [qw(apostrophe single_quote quote prime glitch tick irk pop spark acute_accent)], '(' => [qw(lparen open wax parenthisey left_ear)], ')' => [qw(rparen close wane unparenthisey right_ear)], '[' => [qw(bracket square uturn)], ']' => [qw(unbracket unsquare uturn_back)], '{' => [qw(lsquiggley curley leftit embrace)], '}' => [qw(rsquiggley uncurley rytit bracelet)], '<' => [qw(read suck gozouta from crunch tic)], '>' => [qw(write blow gozinta into zap tac)], '*' => [qw(asterisk star splat wildcard gear dingle mult spider aster times twinkle glob)], '+' => [qw(plus add cross intersection)], ',' => [qw(comma cedilla tail)], '-' => [qw(dash hyphen minus worm option dak bithorpe)], '.' => [qw(period dot point decimal radix fullstop spot)], '/' => [qw(slash stroke slant diagonal solidus over slak virgule slat)], '\\' => [qw(backslash hack whack escape backslant backwhack bash rvirgule backslat)], ':' => [qw(colon dots twospot)], ';' => [qw(semicolon semiweenie hybrid pitthwong)], '=' => [qw(equals gets takes quadrathorpe halfmesh)], '?' => [qw(question query quiz whatmark what wildchar huh hook buttonhook hunchback)], '@' => [qw(at strudel each vortex whorl whirlpool cyclone snail ape cat rose cabbage commercial)], '^' => [qw(circumflex caret hat control uparrow xor chevron shark sharkfin fang exponent pointer)], '_' => [qw(underline underscore underbar skid flatworm)], '`' => [qw(grave backquote backprime backspark unapostrophe birk blugle backtick backglitch push quasiquote)], '|' => [qw(bar or vbar pipe vertical thru spike)], '~' => [qw(tilde squiggle twiddle not approx wiggle swungdash enyay)], ); while (<>) { my $english = join('', (map {explain($_)} split('', $_))); $english =~ s/ +/ /g; $english =~ s/^ //g; print $english; } sub explain { my $c = shift; if ($ra = $chars{$c}) { return " " . $ra->[int(rand(scalar @$ra))] . " "; } return $c; }