sub insert_array_elem { my ($ra, $elem, $index) = @_; # insert $elem before $ra->[$index] if ($index < 0) { # convert negative indexes to positive equiv. $index = @$ra + $index; } if ($index == 0) { # at the beginning unshift @$ra, $elem; } elsif ($index == @$ra) { # at the end push @$ra, $elem; } else { # insert between -- makes copy: bad for large arrays? @$ra = @$ra[0..$index-1], $elem, @$ra[$index..@$ra-1]; } }