From: Joel VanderWerf Date: 2007-05-31T10:56:54+09:00 Subject: Re: `concat': can't modify frozen string in benchmark.rb Pe�a wrote: > Hi All, > > C:\family\ruby>cat test.rb > def f(command_here) > `#{command_here}` > end > a = { "Local copy"=>"copy test.txt test.txt2" } > require 'benchmark' > Benchmark.bmbm do |x| > a.each do |k,v| > x.report(k) { f v } > end > end > > C:\family\ruby>ruby test.rb > c:/ruby/lib/ruby/1.8/benchmark.rb:334:in `concat': can't modify frozen string (T > ypeError) > from c:/ruby/lib/ruby/1.8/benchmark.rb:334:in `report' > from test.rb:12 > from test.rb:11:in `each' > from test.rb:11 > from c:/ruby/lib/ruby/1.8/benchmark.rb:250:in `bmbm' > from test.rb:10 > C:\family\ruby> > > if i comment out line 334 in benchmark.rb like so, > > #label.concat ' ' > > It works. > It also works for the ff cases > x.report(k) { f v } > x.report() { f v } > x.report("") { f v } > x.report("test") { f v } > > What is the relevance of line 334 in benchmark.rb? > If the line is important, how can I fix my program so I can pass a var in x.report? > > thank you and kind regards -botp > A quick workaround would be to use k.dup: x.report(k.dup) { f v } Apparently, benchmark is being bad and munging its inputs (and falling down when one of them happens to be frozen because it is also a hash key). -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407