From: nagachika00@... Date: 2015-10-28T05:30:40+00:00 Subject: [ruby-core:71238] [Ruby trunk - Bug #11575] Blocks in ERB don't work as intended? Issue #11575 has been updated by Tomoyuki Chikanaga. Anyway, you can take a workaround to dup block value like `result = block.call.dup`. Just for reference. ---------------------------------------- Bug #11575: Blocks in ERB don't work as intended? https://bugs.ruby-lang.org/issues/11575#change-54615 * Author: Rohit Kuruvilla * Status: Assigned * Priority: Normal * Assignee: Masatoshi Seki * ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- I'm not sure if this is a problem with ERB, but here it goes - ~~~ require 'ERB' require 'Erubis' $results = [] def return_block(&block) result = block.call $results << result return result end erb_template = <<-ERB <% return_block { %> <% "This should be stored in $results, but not sent to output" %> <% } %> <% return_block { %> <%= "This should be stored in $results AND sent to output" %> <% } %> ERB puts "Result of Template is:" puts "---------------------" #puts Erubis::Eruby.new(erb_template).result puts ERB.new(erb_template).result(binding) puts "---------------------" puts "First call to return_block: #{$results[0]}" puts "Second call to return_block: #{$results[1]}" ~~~ I'd expect the output to be ~~~ Result of Template is: --------------------- This should be stored in $results AND sent to output --------------------- First call to return_block: This should be stored in $results, but not sent to output Second call to return_block: This should be stored in $results AND sent to output ~~~ And this is exactly what I get when using `Erubis`. When I use `ERB`, the output I get is - ~~~ Result of Template is: --------------------- This should be stored in $results AND sent to output --------------------- First call to return_block: This should be stored in $results AND sent to output Second call to return_block: This should be stored in $results AND sent to output ~~~ I'm checking this against older ruby versions too, will update with results. -- https://bugs.ruby-lang.org/