Как операции с разделением запятыми работают в 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)