# How to reopen the puts method

**URL:** <https://www.ruby-forum.com/t/how-to-reopen-the-puts-method/180377>\
**Category:** Ruby\
**Created:** [December 18, 2009, 7:56pm UTC](https://www.ruby-forum.com/t/how-to-reopen-the-puts-method/180377 "2009-12-18T19:56:26Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![b1gtuna](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8dc957/32.png) [@b1gtuna](https://www.ruby-forum.com/u/b1gtuna)\
**Post date:** [December 18, 2009, 7:56pm UTC](https://www.ruby-forum.com/t/how-to-reopen-the-puts-method/180377/1 "2009-12-18T19:56:26Z")

</div>

I am looking for some additional detail regarding the puts method. Hows  
does the basic puts method work?

module Kernel  
def self.puts text  
$stdout.puts “New\_Text”  
end  
end

# the following code doesn’t actually call the Kernel puts method I’ve

redefined.  
puts “Hello, World!”

# however, this code does.

Kernel.puts “Hello, World!”

I would like to insert a debug flag into the basic puts method and  
suppress the output unless a flag is true. Something like this…  
(except this doesn’t work)

module Kernel  
def self.puts text, debug=false  
$stdout.puts text if debug  
end  
end

puts “Hello, World!”, true

Any ideas?

---

<div class="post-metadata">

**Author:** ![b1gtuna](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8dc957/32.png) [@b1gtuna](https://www.ruby-forum.com/u/b1gtuna)\
**Post date:** [December 18, 2009, 9:31pm UTC](https://www.ruby-forum.com/t/how-to-reopen-the-puts-method/180377/2 "2009-12-18T21:31:21Z")

</div>

On Dec 18, 1:56 pm, Adam L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> redefined.  
> def self.puts text, debug=false  
> $stdout.puts text if debug  
> end  
> end
> 
> puts “Hello, World!”, true
> 
> ## Any ideas?
> 
> Posted viahttp://www.ruby-forum.com/.

You’re creating a new Kernel.puts module method; you want to redefine  
the Kernel#puts instance method.

---

<div class="post-metadata">

**Author:** ![b1gtuna](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8dc957/32.png) [@b1gtuna](https://www.ruby-forum.com/u/b1gtuna)\
**Post date:** [December 18, 2009, 9:34pm UTC](https://www.ruby-forum.com/t/how-to-reopen-the-puts-method/180377/3 "2009-12-18T21:34:50Z")

</div>

Adam L. wrote:

> module Kernel  
> def self.puts text, debug=false  
> $stdout.puts text if debug  
> end  
> end
> 
> puts “Hello, World!”, true
> 
> Any ideas?

You want to:

1. open Kernel
2. alias “puts” to something else, like “old puts”
3. define your own puts with your own input
4. call the old puts method when you’re happy with the input

---

<div class="post-metadata">

**Author:** ![b1gtuna](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8dc957/32.png) [@b1gtuna](https://www.ruby-forum.com/u/b1gtuna)\
**Post date:** [December 18, 2009, 9:55pm UTC](https://www.ruby-forum.com/t/how-to-reopen-the-puts-method/180377/4 "2009-12-18T21:55:50Z")

</div>

Ah…so simple. Thanks for the quick reply.
