On Dec 8, 2006, at 14:16 , Andreas S wrote:
> Can anybody help me understanding the relation between Kernel#puts,  
> STDOUT and $stdout?
>
> I thought 'puts' is equivalent to '$stdout.puts'. Why 'puts'  
> doesn't give same result as 'STDOUT.puts'?
>
> class << STDOUT
>  def puts(*args)
>     args[0] = "I say " + args[0] unless args.empty?
>     super(args)
>  end
> end
>
> puts "hello"

This calls $stdout.write "hello\n"

> STDOUT.puts "hello"
> $stdout.puts "hello"
> => hello
>     I say hello
>     I say hello

PS:

Please mess with $stdout, not STDOUT, if at all possible.

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

-- 
Eric Hodel - drbrain / segment7.net - http://blog.segment7.net

I LIT YOUR GEM ON FIRE!