出沢です

matz> $4の評価よりもgsubが呼ばれる方が前なので$4が壊れています.た
matz> とえば

ああ、やはりそのあたりが絡んでいたのか。

はじめ、 printf の前に   $3.gsub!() して駄目だったのです。
で、このときは、
    ことによると、$' とか $2 とかは 基の文字列を copy する事なく
    基のもじれつに対する先頭位置と長さだけもっているのかな

とかんがえたのです。
ならば、 gsub() なら、別の object を返すはずだから良かろう

と思ったのですが、駄目なのですね。

所でわからなくなったぞ。
	f = $4

これって、 f はあたらしい object 作るんでしたっけ?
新しいのを作るなら f = $4.dup で、代入は C で言えば ポインタの
代入ですよね。なのに、これはいいわけ???
        f = $4
        printf "%s%s <A HREF=\"#%s\">%s</A> %s %s\n",
          $`,$1,$2,$2,$3.gsub(/\s:/,"."),f
なぜでしょうか?