Ruby 2.7 - Setting $ special variables to non-nil value is now warned

1 minute read

Ruby has many special variables with $ prefix that have special meaning and, these are global variables. Few of them are:

$/ - Input record separator. Default: “

”. Used by gets, each_line while reading inputs. Used to specify the input row or record separator.

$\ - Output record separator. Default: nil. Used by print and IO#write.

$, - Default separator for Array#join and print. Default: nil.

$; - Default separator for String#split. Default: nil.

These are not frequently used in ruby programs. They were commonly used in oneliner scripts.

Being global, these variables cannot be safely overridden or changed in multi-threaded environments, since they are thread-local.

Ruby 2.7 onwards these 4 variables are deprecated, so setting or overriding the default values for special variables with $ prefix $, , $; , $/ , $\ will throw a deprecated warning.