If you've tried to use ARGF in Ruby to accept piped input you might be in for a surprise when you attempt to add additional command-line arguments, such as:
$ cat something.log | your-ruby-program ~/outputfile.txt "some phrase"
Trying to read the ARGV arguments after using ARGF will cause your program to fail as it first attempts to open a file located at ~/outputfile.txt and read its contents - or even worse, succeed and not perform what you expect if such a file exists. Obviously not the desired goal.
Instead ARGV.shift can be used prior to invoking ARGF to peel those arguments off the argument stack:
#!/usr/bin/env ruby
output_path = ARGV.shift
search_phrase = ARGV.shift
if ARGV.length > 2
limit = ARGV.shift
end
# now ARGF can be accessed without Ruby trying to automatically
# read files named after the supplied arguments
data = ARGF.read
Found this out after a bit of digging on StackOverflow and its in the Ruby docs too.