From: "Jesús Gabriel y Galán" Date: 2011-03-18T02:24:08+09:00 Subject: Re: What is p's real behavior? On Thu, Mar 17, 2011 at 6:02 PM, Yu-Hsuan Lai wrote: > I read the RDoc and it says: > For each object, directly writes *obj*.inspect followed by the current > output record separator to the program‘s standard output. > > But my $\ is surely nil, it still append a newline after output. > ("output record separator" is $\, right?) > Why does it do this? Looking into Ruby 1.8.7's source code I see this in io.c: void rb_p(obj) /* for debug print within C code */ VALUE obj; { rb_io_write(rb_stdout, rb_obj_as_string(rb_inspect(obj))); rb_io_write(rb_stdout, rb_default_rs); } This is the function called by the function defined as 'p'. As you can see it's outputting the rb_default_rs. Searching for this in the source, it's only assigned to here, in io.c: rb_rs = rb_default_rs = rb_str_new2("\n"); So it seems it's assigned to "\n". I don't know if this rb_default_rs is assigned to something else somewhere else (a grep -r rb_default_rs * only shows the assignment I showed above), maybe someone with more knowledge can chime in. If this is not the case, then I guess the documentation should say "the default record separator". Anyone? Jesus.