15

Output-buffering в ruby. Выполняем код, который печатает в stdout и возвращаем его как строку.

require "stringio"
def ob 
        buffer = StringIO.new
        old_stdout = $stdout 
        $stdout = buffer
        yield
        $stdout = old_stdout
        buffer.rewind
        buffer.read
end

v = ob do 
        puts "hello"
end
v2 = ob do 
        puts "world"
end
puts v2 + v

puts(ob do
        print ">"
        r = ob do
                print "!"
        end
        print "<"
        print r
end)
world
hello
><!