While going through John's code (free code review for John!), I came across this tidbit:
map(ord, split('', $word));
Well, Ruby doesn't have an 'ord()' function, so I used this instead:
word.unpack("c*")
At RubyConf 2002, I demonstrated that Perl's 'split()' function by itself is faster than 'unpack()' for splitting words up into chars. But I figured that a split + map combo would be slower. Naturally, I did a benchmark.
our $word = "Hello";
timethese(1000000,{
   "unpack" => q{
      unpack("c*",$word);
   },
   "map n split" => q{
      map(ord, split('', $word));
   },
});
Benchmark: timing 1000000 iterations of map n split, unpack...
map n split: 29 wallclock secs (26.92 usr +  0.00 sys = 26.92 CPU) @ 37147.10/s (n=1000000)
    unpack:  5 wallclock secs ( 4.17 usr +  0.00 sys =  4.17 CPU) @ 239808.15/s (n=1000000)
John's code only does this once per file IIRC, so no big deal. Just something to keep in mind. :)