[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Do not understand this

Bharat Ruparel

2/10/2007 7:09:00 PM

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

--
Posted via http://www.ruby-....

4 Answers

WoNáDo

2/10/2007 8:00:00 PM

0

Bharat Ruparel wrote:
> 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

--
Posted via http://www.ruby-....

Rodrigo Bermejo

2/10/2007 8:13:00 PM

0


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`




--
Posted via http://www.ruby-....

Bharat Ruparel

2/10/2007 8:42:00 PM

0

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

--
Posted via http://www.ruby-....

Eric Hodel

2/10/2007 8:46:00 PM

0

On Feb 10, 2007, at 12:42, Bharat Ruparel wrote:
> 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?

The syntax `cmd` calls the method #` You don't need the closing
quote in the method definition.