Project

General

Profile

Bug #16448

Updated by sawa (Tsuyoshi Sawada) almost 5 years ago

Hi, everyone. 

 I am trying to write a code similar to on this 

 ``` ruby 
 #!/usr/bin/env ruby 

 def check(f1) 
   f2 = ->(match) { p match; p $~ } 
  
   data = "hello test test test" 
  
   data.gsub(/test/, &f1) 
   data.gsub(/test/, &f2) 
 end 

 check(->(match) { p match; p $~ }) 
 ``` 

 output: 
 ``` 
 "test" 
 nil 
 "test" 
 nil 
 "test" 
 nil 
 "test" 
 #<MatchData "test"> 
 "test" 
 #<MatchData "test"> 
 "test" 
 #<MatchData "test"> 
 ``` 

 ruby versions: 
 `ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18]` 
 `ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin18]` 


 Why does the global variable (`$~`) in f1 and f2 work are working differently? It's a bug or my mistake? 

Back