Forum: Ruby Do not understand this

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
D3fc5887a2f39f2e0c8989d39ce5e6f9?d=identicon&s=25 Bharat Ruparel (bruparel)
on 2007-02-10 20:09
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
A131b672fdbd2a58dce12031ad78b121?d=identicon&s=25 Wolfgang Nádasi-Donner (wonado)
on 2007-02-10 21:00
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
63529e6fbb35dde336d471b569b84d87?d=identicon&s=25 Rodrigo Bermejo (rbermejo)
on 2007-02-10 21:12
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`
D3fc5887a2f39f2e0c8989d39ce5e6f9?d=identicon&s=25 Bharat Ruparel (bruparel)
on 2007-02-10 21:42
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
58479f76374a3ba3c69b9804163f39f4?d=identicon&s=25 Eric Hodel (Guest)
on 2007-02-10 21:46
(Received via mailing list)
On Feb 10, 2007, at 12:42, Bharat Ruparel 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.
This topic is locked and can not be replied to.