$linenum = 1 def ppeval(str) success = false begin result = eval(str) success = true return result ensure if not success then $stderr.puts "Error on line #$linenum:" end end end def getline line = $stdin.gets $linenum += 1 if not line.nil? return line end loop do line = getline break if line.nil? case line when /(.*[^\\]|^)\#{(.*?)}(.*)/ puts "#{$1}#{ppeval($2)}#{$3}" when /^\#ruby\s+<<(.*)/ marker = $1 str = '' loop do line = getline if line.nil? then raise "End of input without #{marker}" end break if line.chomp == marker str << line end result = ppeval(str) puts result if not result.nil? when /^\#ruby\s+(.*)/ result = ppeval($1) puts result if not result.nil? else puts line end end