村上と申します。

a = 3
5.times{ |i|
   *a = a
   a |= [i]
}
が、

ruby -v
ruby 1.6.8 (2002-12-24) [i586-mswin32]と
ruby 1.8.0 (2003-08-12) [i386-mswin32]の場合

a => [3, 0, 1, 2, 4]

となるのですが、

ruby 1.8.1 (2003-12-25) [i386-mswin32]の場合、
a => [[[[[3, 0], 1], 2], 3], 4]
と、なってしまいます。

何か変更があったのでしょうか?

もちろん
a = 3
5.times{ |i|
   *a = a unless a.class == Array
   a |= [i]
}
とすればすむ話ですが。