Шаг 58.
Разыменование простой скалярной переменной

    На этом шаге мы рассмотрим получение значения по ссылке, представляющей скалярную переменную.

    Разыменованием ссылки называется получение объекта, на который указывает эта ссылка. Для разыменования, как и для создания ссылки, применяются различные синтаксические конструкции. Вид конструкции зависит от типа ссылки, к которой применяется разыменование. Рассмотрим их по степени возрастания сложности.

Разыменование простой скалярной переменной

    Если ссылка на некоторый объект: скалярную переменную, массив, ассоциативный массив и т. д., является простой скалярной переменной без индексов, то для обращения к самому объекту применяется правило: вместо имени объекта подставить в выражение простую скалярную переменную, содержащую ссылку. Например:

    $а = $$scal_ref;
    @b = @$arr_ref;
    %с = %$hash_ref;
    &f = &$code_ref;
    $$d[0] = 7;
    $$h{"one"} = 1;

    Здесь предполагается, что переменная $scal_ref содержит ссылку на скалярную величину, $arr_ref - ссылку на массив, $hash_ref - ссылку на ассоциативный массив, $code_ref - ссылку на подпрограмму.

    Рассмотрим подробно пятую строку.

    Во-первых, следует определить, что является ссылкой: скалярная переменная $d, указывающая на анонимный массив, или элемент $d[0] массива @d. Ответ содержится в сформулированном выше правиле разыменования. Поскольку в строке 5 применяется именно оно, то индексированная переменная $d[0] ссылкой быть не может. Ссылкой является простая скалярная переменная $d, которая используется в качестве имени. Из контекста видно, что на ее месте должно стоять имя массива, следовательно, $d является ссылкой на анонимный массив.

    Во-вторых, здесь мы имеем пример неявного создания ссылки. Ссылка $d не была ранее создана явным образом, но ее существование предполагается в операции присваивания. Поэтому компилятор создаст ссылку $d на анонимный массив, поместит в нее адрес массива и по этому адресу сохранит значение первого элемента, равное 7.

    Все сказанное можно отнести к шестой строке с единственным отличием: вместо ссылки на анонимный массив здесь фигурирует ссылка $h на анонимный хеш-массив.

    Таким образом, разименованые ссылки могут располагаться не только в правой, но и в левой части оператора присваивания, то есть доступ к объекту можно реализовать через разыменование ссылки на него.

    На следующем шаге мы рассмотрим использование блоков в операциях разименования.




Предыдущий шаг Содержание Следующий шаг