[Moscow.pm] тест на понимание Perl

Maxim Vuets maxim.vuets на gmail.com
Вт Янв 31 12:27:03 PST 2012


2012/1/31 Alexandr Alexeev <afiskon на gmail.com>:

> 31 января 2012 г. 13:32 пользователь Василий Рябов <me на ryvasy.net> написал:
>
>> Заинтересовал 4 вопрос.
>> Почему-то в переменную попадает значение последнего элемента списка.
>>
>> $ perl -MO=Deparse -e '$a = ( 1, 2, 3 )'
>> $a = ('???', '???', 3);
>>
> Я не уверен на счет знаков вопроса, но последний элемент присваивается не
> "почему-то", а потому что в перле списки всегда (ну или по крайней мере - с
> давних пор) так себя вели и в camel book об этом говорится прямым текстом.

Мне кажется, это не поведение списка, а оператор запятая:

"Binary "," is the comma operator. In scalar context it evaluates its
left argument, throws that value away, then evaluates its right
argument and returns that value. This is just like C's comma operator.
In list context, it's just the list argument separator, and inserts
both its arguments into the list. These arguments are also evaluated
from left to right."
--- http://perldoc.perl.org/perlop.html#Comma-Operator

Т.е.:

  ($s) = (2, 8, 37);  # список
  $s   = (2, 8, 37);  # запятая

Поправьте, если ошибаюсь.

-- 
maxim.vuets.name


Подробная информация о списке рассылки Moscow-pm