> So, as I see it, the "sub" method is looking for the first "t" in the
> string.
Almost, it looks for the first t and all "word"-characters after the t.

>The hash says that it will replace [0, 1] elements of the string
> following the "t" ("w" and "o" respectively) with "$1", which has not
> been defined, meaning it will take these letters out of the string.

The thing in curly braces is a block, not a hash.
The $1 is a varaible which contains the first group of the last regexp
match (in this example $1="two").
So the block sasy replace the word "two" with the first letter of the word.