Beginners Question

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

On Dec 29, 2005, at 9:18 AM, joe quimby wrote:

Does anybody understand this ?
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 G. II

Wow that was fast. Thanx a lot

Hi –

On Fri, 30 Dec 2005, joe quimby wrote:

Wow that was fast. Thanx a lot

A quick followup: You can do:

$stdin.gets

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

David


David A. Black
[email protected]

“Ruby for Rails”, from Manning Publications, coming April 2006!

On Sat, 31 Dec 2005, Daniel S. wrote:

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

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 ?

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’

joe quimby wrote:

Thanx
Joe

Try this instead:

while input = $stdin.gets
puts input
end

Cheers,
Daniel