Как операции с разделением запятыми работают в Perl?

В настоящее время я изучаю программирование на Perl и сталкиваюсь с такими утверждениями:

return bless { }, $type;

я знаю что return bless { }; будет делать, и я также знаю, что return $type; будет делать, но как разделение их запятой влияет на оператор, и работает ли он одинаково для всех унарных операторов?

2 ответа

Решение

благослови не унарный оператор, так что получается, что $type передается в bless (где оно используется в качестве имени класса для благословения хеш-рефа).

Единственное, что особенного в возвращении - это то, что выражение в его правой части может оцениваться в списочном, скалярном или пустом контексте в зависимости от контекста, в котором была вызвана подпрограмма.

Оператор запятой не интерпретируется по-разному в return утверждение, чем это было бы в другом месте (за исключением того, что вы не можете сказать, находится ли он в списке или скалярном контексте, посмотрев на return заявление).

Предопределенные функции Perl могут вызываться с круглыми скобками или без них. Большинство людей из других языков путают эти функции с ключевыми словами / операторами.

bless, undef, push, pop, shift, unshift, print, split, join и т. д. - все это функции.

Следовательно, эти два эквивалентны:

 return bless { }, $type;
 return bless({ }, $type);

Но эти два не являются:

 print 2 * 3 + 2; # prints 8
 print(2 * 3) + 2; # prints 6 (with a warning if warnings pragma is on)
Другие вопросы по тегам