Иллюстрированный самоучитель по Perl




Приоритет операций - часть 4


@а = ("al", "a2", "аЗ", "а4");

9m = ("m0", "ml", splice @a, 1, "m2", "mЗ"); ,

В конструкторе массива мы специально задали параметры операции splice без скобок. Если выполнить этот фрагмент и распечатать значения элементов массивов, то результат будет следующим:

@m: m0 ml

@а: al mЗ а2 аЗ а4

Совершенно не то, что нам надо: в массив @т не вставлен фрагмент массива @а, да и из него самого не удалены элементы, начиная со второго. Все дело в том, что операция splice в этом выражении левосторонняя, и весь расположенный справа от нее список рассматривает как список своих параметров: @а, i, "m2", "тЗ". Ее третьим параметром должно быть число, определяющее количество удаляемых из массива элементов, начиная с элемента, индекс которого определен вторым параметром. В нашем случае третий параметр не является числовым, и функция завершается с ошибкой, возвращая Ложь. Исправить положение помогут опять скобки:

@m = ("m0", "ml", (splice @a, 1), "т2", "тЗ");

ИЛИ """' @т = ("m0", "ml", splice (@a, 1), "т2", "тЗ");

Завершая разговор о приоритете выполнения операций, следует объяснить свойство сочетаемости операций и его практическое применение. Сочетаемость важна при вычислении выражений, содержащих операции с одинаковым приоритетом, и определяет порядок их вычисления. Рассмотрим выражение:

$т += $п += 1;

Как следует его понимать? Как ($т += $п) +=1 или как $т += ($п += 1)? Ответ дает правило сочетаемости. Смотрим в табл. 4.4 и видим, что все операции присваивания сочетаются справа налево. Это означает, что сначала должно выполниться присваивание $п += 1, а потом результат увеличенной на единицу переменной $п прибавляется к переменной $т. Следовательно, это выражение эквивалентно следующему:

$т += ($п += 1) ;

Аналогично применяется правило сочетаемости и к другим операциям языка Perl:




Содержание  Назад  Вперед