On 12/3/07, Johnathan Smith <stu_09 / hotmail.com> wrote: > I've changed my approach as i dont actually want to count the lines > > so i now have this: > > ARGV.each do |fn| > begin > (fn == 'reference.txt' ? STDIN : File.open(fn)).each_line do |l| > puts l > end ARGV.each will iterate through every parameter you pass. Since your script is so simple, you're better of with ARGV[0]. You'd have to check the length and see if ARGV.length == 1. A more Ruby-like approach is this: #!/usr/bin/env ruby -wKU if ARGV.length != 1 puts "Syntax is: ruby readfile.rb filename" exit end File.open(ARGV[0], "r") do |file| while line = file.gets puts line end end Using File.open with a block will automatically open and close the file handler and that's a pretty decent practice to start with. I'd highly recommend you the PickAxe book (Programming Ruby, 2nd edition). It does a great job explaining Ruby concepts (the code above is just a rip-off from Mr. Thomas's example on page 129). However, I've heard people complaining that it's a bit daunting for new programmers. Maybe you'd feel a bit better with Learning to Program by Chris Pine if words like "iterators" and "inheritance" make you sweat. -- Andrei Maxim http://andreimaxim.ro