This topic has missing or partial documentation. Please help us improve it.
По правилам синтаксиса имя глобальной переменной должно начинаться с $.
Ожидается, что глобальные переменные доступны из любого контекста
Ruby-программы. Вместе с тем, существует три разновидности глобальных
переменных:истинные, тред-локальные и псевдоглобальные.
Истинные глобальные переменные связывают некоторое значение с
глобально-видимым именем. Пример: $LOAD_PATH.
Тред-локальные глобальные переменные записываются в нотации
глобальных, но в запущенном процессе программы каждый тред имеет свою
отдельную версию переменной. Примерами тред-локальных глобалей являются
$SAFE и $!. Чтобы убедиться, что их величины зависят от контекста
треда, выполним следующий код:
puts $SAFE
Thread.new do
$SAFE = 2
puts $SAFE
end
puts $SAFE
Псевдоглобальные переменные — это ограниченное подмножество имен, которые ссылаются не на глобальные значения, а на значения в текущей области видимости, подобно локальным переменным. Их по-прежнему называют глобальными из-за того, что их имена начинаются со значка доллара, что является источником недоразумений со стороны пользователей.
Все псевдоглобали построены на основе одной, первичной псевдоглобальной
переменной: $~. Все они обеспечивают доступ к разным частям $~, и потому
при изменении $~ все они также изменяются.
Другими псевдоглобалями являются $&, $` (обратный апостроф), $'
(простой апостроф), $+ и группа $1, $2, $3 и т.п.
Одна из хитростей этих величин состоит в том, что они строго привязаны к текущей
области видимости, но Ruby позволяет создавать на них алиасы, как это сделано
в English.rb.
Эти алиасы служат, в основном, способом добавить новые локальные переменные во
все области видимости, в том числе и уже запущенные. По этой причине Rubinius
не в полной мере их поддерживает. Вместо этого мы просто обеспечиваем алиасы,
по умолчанию записанные в English.rb. Например, $MATCH можно использовать
вместо $~ как при включенном English.rb, так и без него.