From: "nobu (Nobuyoshi Nakada)" Date: 2013-01-29T14:19:02+09:00 Subject: [ruby-core:51731] [ruby-trunk - Bug #7678] $_ and $~ are shared across Fibers halfway Issue #7678 has been updated by nobu (Nobuyoshi Nakada). Description updated I think this is one of undefined behaviors, so it would cause no compatibility issue. We can fix it once we decide which is more desirable, shared between fibers or separate per fibers. ---------------------------------------- Bug #7678: $_ and $~ are shared across Fibers halfway https://bugs.ruby-lang.org/issues/7678#change-35697 Author: nobu (Nobuyoshi Nakada) Status: Open Priority: Normal Assignee: Category: core Target version: 2.0.0 ruby -v: r38748 =begin ((|$_|)) and ((|$~|)) have thread local method scope, but are shared across fibers in same thread. $ ./ruby -v -e '/a/ =~ "a"; p $~; Fiber.new{/b/=~"b"; p $~}.resume; p $~' ruby 2.0.0dev (2013-01-09 trunk 38748) [x86_64-darwin11] # # # But, it is cleared at (({Fiber.start})). $ ./ruby -v -e '/a/ =~ "a"; p $~; Fiber.new{p $~}.resume; p $~' ruby 2.0.0dev (2013-01-09 trunk 38748) [x86_64-darwin11] # nil nil These two behaviors seem mismatched. I think: * If they should be shared, then the latter example should show same (({MatchData})) 3 times. * If they should be cleared at starting fibers, those variables in the original fiber should be unchanged. =end -- http://bugs.ruby-lang.org/