From: Tanaka Akira <akr@...>
Date: 2008-04-23T18:03:19+09:00
Subject: [ruby-dev:34492] regexp match confused by thread.

以下のプログラムで、$~.size は、/((ab)*(ab)*)*b/ には括弧が
3つ入っているため、4 を表示するはずなのですが、1 が表示され
ます。

% ./ruby -ve '
Thread.new { loop { // =~ "abc" } } 
sleep 1
5.times {
  /((ab)*(ab)*)*b/ =~ "ab"*8
  p $~.size
}
'
ruby 1.9.0 (2008-04-23 revision 16172) [i686-linux]
1
1
1
1
1

以下のように、最初に起動するスレッドを除去すると、意図どおり
に 4 が表示されるようになります。

% ./ruby -ve '
#Thread.new { loop { // =~ "abc" } }
sleep 1
5.times {
  /((ab)*(ab)*)*b/ =~ "ab"*8
  p $~.size
}
'
ruby 1.9.0 (2008-04-23 revision 16172) [i686-linux]
4
4
4
4
4
-- 
[田中 哲][たなか あきら][Tanaka Akira]