Stuff that seems weird to me:
Just the syntactic presence of “gets”, without even a function call or anything, causes IO to happen. How does that make sense? How can you distinguish between invoking gets and assigning (a procedure involving) gets to a variable? Is there some hacky thing like “syntactic gets is semantic invocation of gets iff you’re in the smallest scope enclosing the gets”?
%w doesn’t take a string (literal) - it takes a bunch of unenclosed syntactic words and returns the raw words? How is that useful?
Calling a hash map a hash. I was wondering why some people seem to get these things confused. This is a particularly bad overloading of terms.
These are some terribly named variables within blocks. Why even mention “readability” if you’re going to use one-letter variable names in your examples?