It doesn't need to be perfectly random; you just need every sequence to have a nonzero probability of being generated.
"to be or not to be" may be more likely for a monkey on a keyboard to generate than a random string, actually. The keys to generate it are highly repetitive and relatively close together. That's true for any NL string: the lower entropy of NL strings are reflected in the keyboard layout. If the monkeys switch to Dvorak, they could probably generate Shakespeare even faster.
So if I randomly type letters from the top row of my keyboard forever, I'll eventually type the entire works of Shakespeare?
Of course not. There are lots of ways you can bias random that remain random, but prevent every possible output from being generated. That's all GP was saying. You can't just say "infinite time", you need to rule out biases that would prevent the desired result.
You don't need "perfect randomness". The claim was about "perfect randomness". You just need a non-zero probability for the outcomes in question. And you need independence between subsequent random events.