1.2.3

## Глобальные переменные

This topic has missing or partial documentation. Please help us improve it.

See How-To - Write Documentation

По правилам синтаксиса имя глобальной переменной должно начинаться с `$`. Ожидается, что глобальные переменные доступны из любого контекста 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`, так и без него.