Do not understand this

B

Bharat Ruparel

I am going through Dave Thomas'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
 
W

Wolfgang Nádasi-donner

Bharat said:
I am going through Dave Thomas'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
 
R

Rodrigo Bermejo

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`
 
B

Bharat Ruparel

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
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,074
Latest member
StanleyFra

Latest Threads

Top