https://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112019-12-23T13:47:13ZRuby Issue Tracking SystemRuby master - Bug #16448: regex global variables are working differently depending on scopehttps://redmine.ruby-lang.org/issues/16448?journal_id=833522019-12-23T13:47:13Zmame (Yusuke Endoh)mame@ruby-lang.org
<ul></ul><p><code>$~</code> is not a global variable, but a kind of local variable. <code>String#gsub</code> assigns the match data to <code>$~</code> of its caller. <code>data.gsub(/test/, &f1)</code> assigns <code>$~</code> of the scope of <code>check</code>. The lambda <code>f1</code> reads <code>$~</code> of the toplevel scope, which is not set.</p>
<p>You can see the behavior by the following code:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">check</span><span class="p">(</span><span class="n">f1</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="s2">"foobar"</span>
<span class="n">data</span><span class="p">.</span><span class="nf">gsub</span><span class="p">(</span><span class="sr">/foo/</span><span class="p">,</span> <span class="o">&</span><span class="n">f1</span><span class="p">)</span> <span class="c1">#=> #<MatchData "DUMMY"></span>
<span class="nb">p</span> <span class="vg">$~</span> <span class="c1">#=> #<MatchData "foo"></span>
<span class="n">f2</span> <span class="o">=</span> <span class="o">-></span><span class="p">(</span><span class="n">match</span><span class="p">)</span> <span class="p">{</span> <span class="nb">p</span> <span class="vg">$~</span> <span class="p">}</span>
<span class="n">data</span><span class="p">.</span><span class="nf">gsub</span><span class="p">(</span><span class="sr">/bar/</span><span class="p">,</span> <span class="o">&</span><span class="n">f2</span><span class="p">)</span> <span class="c1">#=> #<MatchData "bar"></span>
<span class="nb">p</span> <span class="vg">$~</span> <span class="c1">#=> #<MatchData "bar"></span>
<span class="k">end</span>
<span class="s2">"DUMMY"</span> <span class="o">=~</span> <span class="sr">/DUMMY/</span>
<span class="n">check</span><span class="p">(</span><span class="o">-></span><span class="p">(</span><span class="n">match</span><span class="p">)</span> <span class="p">{</span> <span class="nb">p</span> <span class="vg">$~</span> <span class="p">})</span>
</code></pre> Ruby master - Bug #16448: regex global variables are working differently depending on scopehttps://redmine.ruby-lang.org/issues/16448?journal_id=833532019-12-23T14:01:27Ztdrive (Stanislav Boldaev)
<ul></ul><p>It is very unexpected.(<br>
Thank you.</p> Ruby master - Bug #16448: regex global variables are working differently depending on scopehttps://redmine.ruby-lang.org/issues/16448?journal_id=833542019-12-23T14:18:02Zsawa (Tsuyoshi Sawada)
<ul><li><strong>Subject</strong> changed from <i>regex global variables are working differently depend on scope</i> to <i>regex global variables are working differently depending on scope</i></li><li><strong>Description</strong> updated (<a title="View differences" href="/journals/83354/diff?detail_id=55904">diff</a>)</li></ul> Ruby master - Bug #16448: regex global variables are working differently depending on scopehttps://redmine.ruby-lang.org/issues/16448?journal_id=833632019-12-23T17:49:37Zjeremyevans0 (Jeremy Evans)merch-redmine@jeremyevans.net
<ul><li><strong>Related to</strong> <i><a class="issue tracker-1 status-1 priority-4 priority-default" href="/issues/8444">Bug #8444</a>: Regexp vars $~ and friends are not thread local</i> added</li></ul> Ruby master - Bug #16448: regex global variables are working differently depending on scopehttps://redmine.ruby-lang.org/issues/16448?journal_id=932782021-08-13T21:09:17Zjeremyevans0 (Jeremy Evans)merch-redmine@jeremyevans.net
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul>