The Cocoa docs say that you pass arguments to child processes in an array of
strings. Well, I assumed that it was just taking the elements of the array
and writing them to the child's stdin using something like sprintf().

But it's not doing that. Somehow it sets argc and argv in the child process
directly. So if you want Ruby to see '-r somefile'  you have to put '-r' and
'somefile' in separate but adjacent array elements.

Actually, its more complicated than that because these are NSStrings so you
are really putting pointers in the array.
-- 
I have discovered that all human evil comes from this, man's being unable
to sit still in a room. -Blaise Pascal, philosopher and mathematician
(1623-1662)