Different behavior of '$,' output separator in Ruby 1.9

In switching to Ruby 1.9 from 1.8 I notice that the behavior of the ‘$,’
output separator has changed. In Ruby 1.9 the output separator is
placed after a newline character, but this didn’t happen with Ruby 1.8.
Using the following code:


$, = ', ’

data = [[‘a’, ‘b’, ‘c’], [‘1’, ‘2’, ‘3’], [‘x’, ‘y’, ‘z’]]

file_out = File.new(“test.csv”, “w”)

data.each do |elem|
file_out.print elem[0], elem[1], elem[2], “\n”
end

file_out.close

and running with Ruby 1.8 produces a file that contains

a, b, c,
1, 2, 3,
x, y, z,

but with Ruby 1.9 the contents of the file look like

a, b, c,
, 1, 2, 3,
, x, y, z,
,

Is this an intentional change of behavior?
–Alex

On 3/5/10, Alex DeCaria [email protected] wrote:

In switching to Ruby 1.9 from 1.8 I notice that the behavior of the ‘$,’
output separator has changed. In Ruby 1.9 the output separator is
placed after a newline character, but this didn’t happen with Ruby 1.8.

That doesn’t seem right.

Alex,

If you make a few minor modifications:

$, = ', ’
$\ = “\n” ### output record separator ###

data = [[‘a’, ‘b’, ‘c’], [‘1’, ‘2’, ‘3’], [‘x’, ‘y’, ‘z’]]

file_out = File.new(“test.csv”, “w”)

data.each do |elem|
file_out.print elem[0], elem[1], elem[2] ### no newline FIELD ###
end

file_out.close

then you will get what you want in Ruby 1.9.
a, b, c,
1, 2, 3,
x, y, z,
I have not tried it in Ruby 1.8.

Looks like it is adding the output field separator AFTER the newline
FIELD.

On 03/05/2010 08:46 PM, Caleb C. wrote:

On 3/5/10, Alex DeCaria [email protected] wrote:

In switching to Ruby 1.9 from 1.8 I notice that the behavior of the ‘$,’
output separator has changed. In Ruby 1.9 the output separator is
placed after a newline character, but this didn’t happen with Ruby 1.8.

That doesn’t seem right.

I agree. 1.9 writes one field separator too much. This must be a bug.

Alex, separators are intended to be used a tad differently. You would
rather set the output record separator as well:

[email protected]:~$ ruby -e ‘$,="@";$=“NL\n”;print 1,2,3’
[email protected]@3NL
[email protected]:~$

Kind regards

robert

Should I submit a bug report, or do you think it will be eventually
noticed on this forum?
–Alex

On 03/07/2010 01:09 PM, Alex DeCaria wrote:

Should I submit a bug report, or do you think it will be eventually
noticed on this forum?

I’d check whether that bug is known already and only file in cast it is
not:
http://redmine.ruby-lang.org/projects/show/ruby-191

Kind regards

robert

On 3/7/10, Alex DeCaria [email protected] wrote:

Should I submit a bug report, or do you think it will be eventually
noticed on this forum?

File a bug.

Hi,

In message “Re: Different behavior of ‘$,’ output separator in Ruby 1.9”
on Sat, 6 Mar 2010 04:06:22 +0900, Alex DeCaria
[email protected] writes:

|In switching to Ruby 1.9 from 1.8 I notice that the behavior of the ‘$,’
|output separator has changed. In Ruby 1.9 the output separator is
|placed after a newline character, but this didn’t happen with Ruby 1.8.

Sorry it was a bug introduce in r11003. Fixed in r26906.

          matz.