I've hit what is either an egregious bug in ruby (1.8.4) or some subtlety
that I haven't grasped.  [Most likely the latter... (:-)]

Briefly I had two arrays of symbol strings of which I wanted to find
which symbols occurred in both arrays, so I thought I'd use a hash with
the key being the symbol and the value a two element array that would
be used to flag which set(s) the symbol was found in.  The following
is a simplified (and 'instrumented') version of what I was trying to
do:

listA=["line1","line2","line3"]
listB=["line5","line3","line4"]
table={}
table.default=[0,0]
print "table default originally: ", table.default, "\n"

listA.each {|a| t=table[a]; print a," -- undef value: ",t;
			t[0]=1; print "  new value: ",t,"\n";
			table[a]=t}
print "table default now: ", table.default, "\n"

listB.each {|a| t=table[a]; print a," -- undef value: ",t;
			t[1]=1; print "  new value: ",t,"\n";
			table[a]=t}

print "table default now: ", table.default, "\ntable contents:\n"
table.each {|k,v| print k, ": ", v[0], v[1], "\n"}


Now, in the 'each' statements, the variable 'a' should (except in one case)
not be in the hash yet, so I would expect the original provided default to
be returned.  However, here's the printout I get:

table default now: 00
line1 -- undef value: 00  new value: 10
line2 -- undef value: 10  new value: 10
line3 -- undef value: 10  new value: 10
table default now: 10
line5 -- undef value: 10  new value: 11
line3 -- undef value: 11  new value: 11
line4 -- undef value: 11  new value: 11
table default now: 11
table contents:
line1: 11
line2: 11
line3: 11
line4: 11
line5: 11


Dunhh?  Why is the default value getting changed?  I can't see that
I'm resetting it anywhere.  If I do the same sort of manipulations
outside of a block (one at a time in irb for instance) things happen
as I would expect -- the default remains as set, and is returned for
any undefined key.

Illumination appreciated.
				-- Pete --