Hello,
I am new to Ruby and am about to start my first application that exceeds the
size of gello.rb 
One of the first things I am missing is something like perl's Data::Dumper
module. This module is able to take a (nested) data structure and dump it
in perl syntax.
Anybody knows of a similar thing for ruby?
In Ruby we generally use the standard YAML library for that. If you don't need the content to be human readable, you could also use Marshal, part of Ruby's core. Ruby 1.9 also ships with a JSON library, which is available as a gem for Ruby 1.8.
Hope that helps.
James Edward Gray II
You might also be interested in the inspect method. It's what irb uses to show the last value, but you can call it yourself to get a string representation of standard data structures.
my_hash_of_arrays = { 'fibs' => [ 0, 1, 1, 2, 3, 5, 8, 13 ],
'primes' => [ 2, 3, 5, 7, 11, 13, 17, 19 ], 'squares' => [ 1, 4, 9, 16 ] }
=> {"fibs"=>[0, 1, 1, 2, 3, 5, 8, 13], "squares"=>[1, 4, 9, 16], "primes"=>[2, 3, 5, 7, 11, 13, 17, 19]}
my_hash_of_arrays.inspect
=> "{\"fibs\"=>[0, 1, 1, 2, 3, 5, 8, 13], \"squares\"=>[1, 4, 9, 16], \"primes\"=>[2, 3, 5, 7, 11, 13, 17, 19]}"
puts my_hash_of_arrays.inspect
{"fibs"=>[0, 1, 1, 2, 3, 5, 8, 13], "squares"=>[1, 4, 9, 16], "primes"=>[2, 3, 5, 7, 11, 13, 17, 19]}
=> nil
p my_hash_of_arrays
{"fibs"=>[0, 1, 1, 2, 3, 5, 8, 13], "squares"=>[1, 4, 9, 16], "primes"=>[2, 3, 5, 7, 11, 13, 17, 19]}
=> nil
You can also require the pretty print library.
require 'pp'
=> true
pp my_hash_of_arrays
{"fibs"=>[0, 1, 1, 2, 3, 5, 8, 13],
"squares"=>[1, 4, 9, 16],
"primes"=>[2, 3, 5, 7, 11, 13, 17, 19]}
=> nil
And you can get that value into your own string with the PP::pp method (and a StringIO to collect the "output")
require 'stringio'
=> true
my_string = StringIO.new
=> #<StringIO:0x394234>
PP::pp(my_hash_of_arrays, my_string)
=> #<StringIO:0x394234>
my_string.rewind
=> 0
my_string.read
=> "{\"fibs\"=>[0, 1, 1, 2, 3, 5, 8, 13],\n \"squares\"=>[1, 4, 9, 16],\n \"primes\"=>[2, 3, 5, 7, 11, 13, 17, 19]}\n"
my_string.rewind
=> 0
puts my_string.read
{"fibs"=>[0, 1, 1, 2, 3, 5, 8, 13],
"squares"=>[1, 4, 9, 16],
"primes"=>[2, 3, 5, 7, 11, 13, 17, 19]}
=> nil
And all of this is part of Ruby's standard library.
-Rob
Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com
路路路
On Sep 3, 2009, at 11:06 AM, James Edward Gray II wrote:
On Sep 3, 2009, at 10:00 AM, Josef Wolf wrote: