Thanks to all for the pointer to #inspect and the behavior of #join in Ruby. For some reason the possibility of using 'join' slipped my mind. Python's 'join' requires the array to already be made of strings or else the effect of a 'map/str' is required: a=[1,2,3,4] ruby> a.join(",") #-> "1, 2, 3, 4" python> string.join(map(str,a), ", ") #-> "1, 2, 3, 4" Interesting that Ruby does a #to_s on the elements of the array first. But I noticed another oddity for nested arrays: #join flattens the array!! [[1,2],[3,4]].join(", ") #-> "1, 2, 3, 4" while #inspect works fine: [[1,2],[3,4]].inspect #-> "[[1, 2], [3, 4]]" Given that Ruby has a #flatten is this the prefered/expected behavior of #join ?? If we really wanted the current behavior of #join shouldn't we be doing a.flatten.join(", ") ? * * Too bad that such a crucial issue as exception raising for out-of-bounds indexing in an array (or hash) got left out. As, Dave suggests, I'm curious to try overloading [], []= to see if/what breaks. * * With reference to my own follow-up of my original posting. When creating a sub-portion of an array that is not valid we get nil instead of what i'd expect, an empty array, [] a=[1,2,3,4] a[10] #-> nil OK, since there is no array bounds checking # and concomittant exception raising in Ruby But, a[10..20] #-> nil instead of [] The problem is then that it looks like we can't iterate over an a segment of an array that might not be valid: e.g., i=10; j=20 for e in a[i..j] ... end It looks like either nil needs to have the 'each' method defined on it or else the array segment should be []. I really think a[i..j], a[i...j], and a[i,cnt] should return [] for non-existing array segments. Is there a Ruby idiom for dealing with this situation? Should we really be explicitly checking our code for non-existing array segments??? Thanks again. (does seem to be nice friendly bunch on clr :-) Raja