This can easily be done with aliasing. I'd say that this is a very common idiom for decorating methods.
# "open" Kernel module, that's where the `puts` lives.
module Kernel
# our new puts
def puts_with_append *args
new_args = args.map{|a| a + ' hello world'}
puts_without_append *new_args
end
# back up name of old puts
alias_method :puts_without_append, :puts
# now set our version as new puts
alias_method :puts, :puts_with_append
end
puts 'foo'
# >> foo hello world
# it works with multiple parameters correctly
puts 'bar', 'quux'
# >> bar hello world
# >> quux hello world