Use readline instead of gets

The simplest way to read a line of input is to use the gets method. However, if you try to use the arrow keys when entering text, you will see that this merely types random \^[[D strings instead of moving the cursor:

s = gets
press the left arrow^[[D
=> "press the left arrow\e[D\n"

To get around this, use readline instead:

> require 'readline'
> s = Readline.readline
now you can use the arrow keys
=> "now you can use the arrow keys"

Readline can take the prompt as an argument:

> s = Readline.readline("enter some text: ")
enter some text: here is some text
=> "here is some text"

Readline also has an optional second argument. This is a boolean which specifies whether to keep history across readline method calls. The default is false, but if you pass in true, you can use the up arrow to retrieve input from previous readline calls:

> s = Readline.readline("enter some text: ", true)
enter some text: here is some text
=> "here is some text"
> s = Readline.readline("now press the up arrow: ", true)
now press the up arrow: here is some text
=> "here is some text"