Is this possible?

Is there anyway to override the STDIN of a ruby program, do that when a
command such as ‘gets’ is called somewhere randomly in the program, I am
able to control what action is taken. i.e. i don’t want it to block if
there is nothing in the STDIN buffer, i would like to be able to do my
own thing.

NOTE: the programs will be generated randomly, so i can’t just call a
different method (one i defined). But i can add to the code…

Thanks for your time

On Wed, 2006-11-22 at 06:06 +0900, James S. wrote:

Is there anyway to override the STDIN of a ruby program, do that when a
command such as ‘gets’ is called somewhere randomly in the program, I am
able to control what action is taken. i.e. i don’t want it to block if
there is nothing in the STDIN buffer, i would like to be able to do my
own thing.

NOTE: the programs will be generated randomly, so i can’t just call a
different method (one i defined). But i can add to the code…

You can use IO#reopen on STDIN, or you can undefine the constant and
then redefine it.

Aria

On Nov 21, 2006, at 1:16 PM, Aredridel wrote:

NOTE: the programs will be generated randomly, so i can’t just call a
different method (one i defined). But i can add to the code…

You can use IO#reopen on STDIN, or you can undefine the constant and
then redefine it.

Please don’t mess with STDIN, STDOUT and STDERR unless you really,
really have to.

Use $std* instead.

http://blog.segment7.net/articles/2006/08/17/stdout-vs-stdout


Eric H. - [email protected] - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

Aredridel wrote:

On Wed, 2006-11-22 at 06:06 +0900, James S. wrote:

Is there anyway to override the STDIN of a ruby program, do that when a
command such as ‘gets’ is called somewhere randomly in the program, I am
able to control what action is taken. i.e. i don’t want it to block if
there is nothing in the STDIN buffer, i would like to be able to do my
own thing.

NOTE: the programs will be generated randomly, so i can’t just call a
different method (one i defined). But i can add to the code…

You can use IO#reopen on STDIN, or you can undefine the constant and
then redefine it.

Aria

Do you think you could expand? (i am fairly new to Ruby) what actually
happens when, for example, ‘gets’ is called? Does it just try and read
from the STDIN variable and then block if this is equal to ‘nil’ ?