原です。

間違って前田さんに私信として返事してしまいました。
ごめんなさい。では送り直し。

In message "iteration with index (Re: How to write Perl's `@a[@b] = @c' in ruby)"
    on 98/04/20, Shugo Maeda <shugo / po.aianet.ne.jp> writes:

|前田です。

|class Object
|  def with_index(iterator, *args)
|    i = 0
|    send(iterator, *args) do |*x|
|      result = yield(i, *x)
|      i = i.next
|      result
|    end
|  end
|end
|
|とすれば、
|
|p "foo bar baz".with_index(:gsub, /[a-z]+/) { |i, s| i.to_s }
|#=> "0 1 2"
|
|などとできますね。

こんなことはできないですかね。

  With_index という module を作り、enumerable なオブジェクト
  foo に対して、例えば

    foo.extend(With_index).collect

  とすると、これは collect_with_index として動作する

ちょっと考えたけど難しそうだった。