Below is my "show" method followed by some tests. I envision using something like this to produce a tutorial for myself. Examples 1 & 2 demonstrate that "show" accepts a source code string and then displays the source code followed by the result one would obtain by executing that code in a stand-alone environment. But Example #3 does not transmit elements of string (identified by a pattern) to a succeeding string. However, Example #4 demonstrates that code in #3 (even with an abstraction for the number of digits) works fine outside of "eval". Is this problem the result of a limitation in eval, or is the a way to code it so it works? ====== results ========= >ruby Test1.rb a=2; b=3; a*b => 6 hrs=24; mins=60; "mins/day = " + (hrs*mins).to_s => mins/day = 1440 require 'bigdecimal' require 'bigdecimal/math' include BigMath BigMath::PI(6).to_s =~ /.(.)(.)(.{5})/ "result = " + "" => result = Pi = 3.14159 (to 6 significant digits) >Exit code: 0 ======= code ========= def show(stmt) puts stmt puts "=> " + eval(stmt).to_s puts end #1: Works great show("a=2; b=3; a*b") #2: Works great, too show(%Q@ hrs=24; mins=60; "mins/day = " + (hrs*mins).to_s @) #3: Can't find the elements of the match show(%Q@require 'bigdecimal' require 'bigdecimal/math' include BigMath BigMath::PI(6).to_s =~ /.(.)(.)(.{5})/ "result = " + "#{$2}#{$1}#{$3}" @) #4: But this can find them just fine: require 'bigdecimal' require 'bigdecimal/math' include BigMath n=6 BigMath::PI(n).to_s =~ /.(.)(.)(.{#{n-1}})/ puts "Pi = #{$2}#{$1}#{$3} (to #{n} significant digits)"