Do not understand this


#1

I am going through Dave T.'s Programming Ruby Second Edition book.
I am trying to execute the code given on page 89 of the book which is as
follows:

Sample code from Programing Ruby, page 83

alias old_backquote def(cmd)
result = old_backquote(cmd)
if $? != 0
fail “Command #{cmd} failed: #$?”
end
result
end
print date
print data

when I try to run this code by typing

ruby ex200.rb at the command prompt (on Windows XP machine), the program
hangs. When I abot it by hitting CTRL-C key combination, I get the
following stack-trace:

ex0200.rb:4:in `old_backquote’: Interrupt
from ex0200.rb:4:in ``’
from ex0200.rb:10

I don’t quite understand what is going on here. As a matter of fact, I
don’t think that I understand the redefinition of the backquote above.
I know that I can execute a system command by putting in inside two
matching backquote characters whereas his code is aliasing only one
backquote character. How can this work?
Bharat


#2

Bharat R. wrote:

I am going through Dave T.'s Programming Ruby Second Edition book.
I am trying to execute the code given on page 89 of the book which is as
follows:

Sample code from Programing Ruby, page 83

alias old_backquote def(cmd)
result = old_backquote(cmd)
if $? != 0
fail “Command #{cmd} failed: #$?”
end
result
end
print date
print data

when I try to run this code by typing

ruby ex200.rb at the command prompt (on Windows XP machine), the program
hangs. When I abot it by hitting CTRL-C key combination, I get the
following stack-trace:

ex0200.rb:4:in `old_backquote’: Interrupt
from ex0200.rb:4:in ``’
from ex0200.rb:10

I don’t quite understand what is going on here.

Windows waits for an Input!

If you enter “date” in a console window, the system will ask you to
enter a new date. When youn press “enter” instead of CTRL-C, the
reaction will be as described in the book.

Wolfgang Nádasi-Donner


#3

As Wolf stated the problem is with the ‘date’ command on windows.
Just change the called command for something that do not ask for input
and it will work.

alias old_backquote def(cmd)
result = old_backquote(cmd)
if $? != 0
fail “Command #{cmd} failed: #$?”
end
result
end

puts dir


#4

On Feb 10, 2007, at 12:42, Bharat R. wrote:

What happens to the closing quote? Is this not odd?
The syntax cmd calls the method #` You don’t need the closing
quote in the method definition.


#5

Thank you gents.

You are right, when you type date command, windows does wait for your
input and that explains why a command window opens up and appears to
hang. I tried hitting Enter key as we normallly do in response to a
DOS/Windows command and still no response - may be a Ruby thing.

I did change the command to dir which does not wait for a response and
got the expected output.

Lastly, this may be a silly question, but the backquote (`0) command
redefinition however does not make sense to me. Seems to me that the
backquote symbol is being redefined as follows:

def `(cmd)

This is only redefining the backquote character `

but the method is invoked as dir or date

What happens to the closing quote? Is this not odd?

Bharat