On Wednesday 03 Sep 2003 11:06 am, Andrew Walrond wrote:
> Is there an easy way of getting each line of a ruby script to be written to
> stdout before being executed?
> I currently use a wrapper function which takes the command as a string and
> puts()'s then eval()'s it, but thats very ugly.
>
> Any suggestions?
>

The following function will do the trick

def trace_program(file)
  lines = File.readlines(file)
  set_trace_func proc do |event, file, line, *extra| 
    puts lines[line - 1] if event == "line"
  end
end

This reads the file into an array then sets up a system hook to get the line 
number of each line before it's executed, and prints the line from the array.

Then you do something like

trace_program(__FILE__)

puts "x"
puts "y"
puts "z"

which outputs
puts "x"
x
puts "y"
y
puts "z"
z

Though there is probably a more Rubyist way to do this.

> Andrew Walrond

Best Regards

Mark Sparshatt