Gotoken proposed code for Array#insert:
> How about this?
>
>   class Array
>     def insert(pos, *obj)
>       self[pos,0] = obj
>       self
>     end
>   end
> 
>   a = [1,2,3] ; a.insert(1, [4, 5]) ; p a #=> [1, [4, 5], 2, 3]
>   a = [1,2,3] ; a.insert(1,  4, 5 ) ; p a #=> [1, 4, 5, 2, 3]
> 

I like it. So here's a (equivalent?) patch which produces

  a=[1,2,3]; a.insert(1, [4,5]); p a;
  [1, [4, 5], 2, 3]

  a=[1,2,3]; a.insert(1, 4,5); p a;
  [1, 4, 5, 2, 3]

  a=[1,2,3]; a.insert(-1, [4,5]); p a;
  [1, 2, [4, 5], 3]

  a=[1,2,3]; a.insert(4, [4,5]); p a;
  [1, 2, 3, nil, [4, 5]]

  a=[1,2,3]; a.insert(-4, [4,5]); p a;
  -e:1:in `insert': index -4 out of array (IndexError)
          from -e:1

  a=[1,2,3]; a.insert(1); p a;
  -e:1:in `insert': wrong # of arguments (1 when 2 required) (ArgumentError)
          from -e:1

  a=[1,2,3]; a.insert([4,5], 1); p a;
  -e:1:in `insert': Argument position is not a fixnum (ArgumentError)
          from -e:1

Approved?

	- Aleksi

[niemela@mercury ruby]$ cvs diff -u array.c
Index: array.c
===================================================================
RCS file: /home/cvs/ruby/array.c,v
retrieving revision 1.30
diff -u -r1.30 array.c
--- array.c     2000/10/10 07:03:15     1.30
+++ array.c     2000/10/19 16:52:05
@@ -617,6 +617,30 @@
     return argv[1];
 }
 
+static VALUE
+rb_ary_insert(argc, argv, ary)
+    int argc;
+    VALUE *argv;
+    VALUE ary;
+{
+    VALUE objects;
+    long pos;
+
+    if (argc < 2) {
+       rb_raise(rb_eArgError, "wrong # of arguments (%d when 2 required)",
argc);
+    }
+
+    if (TYPE(argv[0]) != T_FIXNUM) {
+      rb_raise(rb_eArgError, "Argument position is not a fixnum");
+    }
+
+    pos = FIX2INT(argv[0]);
+    objects = rb_ary_new4(argc-1, argv+1);
+    rb_ary_replace(ary, pos, 0, objects);
+
+    return ary;
+}
+
 VALUE
 rb_ary_each(ary)
     VALUE ary;
@@ -1615,6 +1639,7 @@
 
     rb_define_method(rb_cArray, "[]", rb_ary_aref, -1);
     rb_define_method(rb_cArray, "[]=", rb_ary_aset, -1);
+    rb_define_method(rb_cArray, "insert", rb_ary_insert, -1);
     rb_define_method(rb_cArray, "at", rb_ary_at, 1);
     rb_define_method(rb_cArray, "first", rb_ary_first, 0);
     rb_define_method(rb_cArray, "last", rb_ary_last, 0);