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

Разные операции

Операция запятая

Бинарная операция запятая, ведет себя по-разному в скалярном и списковом контексте.

В списковом контексте она является всего лишь разделителем между элементами списка:

@а = (1, 2); # Создается массив скаляров
# и его элементам присваиваются значения 1 и 2.

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

$а = (1, 2); # Переменной $а присваивается значение 2.

Замечание
Надеемся, читателю теперь стало ясно, почему конструкторы массивов, о которых мы рассказывали в гл. 3, в скалярном и в списковом контексте ведут себя по-разному
.

Для операции запятая в языке Perl существует удобный синоним – операция ›, которая полностью идентична операции запятая и удобна при задании каких-либо величин, которые появляются парами, например, ключ/значение в ассоциированных массивах. Правда, эта операция обладает еще одним свойством, достаточно удобным для ее использования при задании ассоциированных массивов: любой идентификатор, используемый в качестве ее левого операнда, интерпретируется как строка.

Операция выбора

Единственная тернарная операция выбора:

операнд?! операнд2: операнд3

…полностью заимствована из языка С и работает точно так же, как и ее двойник. Если операнд! истинен, то возвращается значение операнд2, в противном случае операнда:

($n = 1)? $а: Sarray;

Скалярный или списковый контекст, в котором используется эта операция, распространяется и на возвращаемое значение этой операции:

$а = $yes? $b: @b; tt Скалярный контекст. Если возвращается
# массив @b, то присваивается количество его t элементов.

Операцию выбора можно использовать в качестве левого операнда операции присваивания, если и второй, и третий ее операнды являются правильными lvalue, т. е. такими значениями, которым можно присвоить какое-либо значение, например, именами переменных:

($а = $yes? $b: @b) = @с;

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

($а % 3)? ($а += 2): ($а -= 2);

…опустить скобки вокруг операндов:

$а % 3? $а += 2: $а -= 2;

…то оно будет откомпилировано следующим образом:

(($а % 3)? ($а += 2): $а).-= 2;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.