I\'m using gets to pause my script\'s output until the user hits the enter key. If I don\'t pass any arguments to my script then it works fine. However, if I
Ruby will automatically treat unparsed arguments as filenames, then open and read the files making the input available to ARGF ($<). By default, gets reads from ARGF. To bypass that:
$stdin.gets
It has been suggested that you could use STDIN instead of $stdin, but it's usually better to use $stdin.
Additionally, after you capture the input you want from ARGV, you can use:
ARGV.clear
Then you'll be free to gets without it reading from files you may not have intended to read.
The whole point of Kernel#gets is to treat the arguments passed to the program as filenames and read those files. The very first sentence in the documentation reads:
Returns (and assigns to $_) the next line from the list of files in ARGV (or $*)
That's just how gets works. If you want to read from a specific IO object (say, $stdin), just call gets on that object.