$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

