Beginners Question

Discussion in 'Ruby' started by joe quimby, Dec 29, 2005.

  1. joe quimby

    joe quimby Guest

    Hello Folks,

    I am trying to learn ruby, so i wrote some simple scripts.
    But the following script does not work as expected:

    #!/usr/bin/ruby

    while gets != nil
    print $_
    end

    if i call 'echo.rb' (without any parameters) from my cygwin shell, the
    scripts does what i expect it to do. It reads and returns the input.
    But if i call it with any parameters, like

    echo.rb anything

    i get a error message saying : '... `gets': No such file or directory -
    12 (Errno::ENOENT)...'

    Does anybody understand this ?

    Thanx
    Joe
     
    joe quimby, Dec 29, 2005
    #1
    1. Advertisements

  2. gets() reads from the files given as command-line arguments, or
    STDIN, if none were given. So in your example above, "anything" is
    expected to be the path to a file that will be read.

    Just FYI, your example is also a little Perlish. Us Ruby guys
    generally write that as:

    ARGF.each_line do |line|
    puts line
    end

    Hope that helps.

    James Edward Gray II
     
    James Edward Gray II, Dec 29, 2005
    #2
    1. Advertisements

  3. joe quimby

    joe quimby Guest

    Wow that was fast. Thanx a lot
     
    joe quimby, Dec 29, 2005
    #3
  4. joe quimby

    dblack Guest

    Hi --

    A quick followup: You can do:

    $stdin.gets

    which will force (in the case of your example) keyboard input.


    David

    --
    David A. Black


    "Ruby for Rails", from Manning Publications, coming April 2006!
    http://www.manning.com/books/black
     
    dblack, Dec 29, 2005
    #4
  5. Try this instead:

    while input = $stdin.gets
    puts input
    end


    Cheers,
    Daniel
     
    Daniel Schierbeck, Dec 29, 2005
    #5
  6. joe quimby

    Wybo Dekker Guest

    you could also have said:
    #!/usr/bin/ruby
    print while gets
    apparently you typed:

    echo.rb 12

    If there are arguments, ruby interprets those as the names of files to
    be used (after concatenation) as standard input. But there was no file '12'
     
    Wybo Dekker, Dec 31, 2005
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.