Project

General

Profile

Bug #19597

Updated by andrykonchin (Andrew Konchin) over 1 year ago

`Process.argv0` returns a name of the script being executed. But it seems it's always the same object, that can be modified and this change will be visible to the consequent `Process.argv0` calls. 

 It makes sense to return a frozen String that cannot be modified. 

 `$0` initial value equals a value returned by `Process.argv0` so `$0` by default also could be a frozen String. 

 Example: 

 ```ruby 
 puts "Object id:" 
 p Process.argv0.object_id 
 p Process.argv0.object_id 

 puts "Value before modification:" 
 p Process.argv0 
 Process.argv0.upcase! 

 puts "Value after modification:" 
 p Process.argv0 

 puts "$0 after modification:" 
 p $0 
 ``` 

 It will output: 

 ``` 
 Object id: 
 60 
 60 
 Value before modification: 
 "argv0.rb" 
 Value after modification: 
 "ARGV0.RB" 
 $0 after modification: 
 "ARGV0.RB" 
 ```

Back