Как операции с разделением запятыми работают в Perl? - PullRequest
2 голосов
/ 28 января 2011

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

return bless { }, $type;

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

Ответы [ 2 ]

5 голосов
/ 28 января 2011

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

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

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

2 голосов
/ 28 января 2011

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

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

*1004* Следовательно, эти два эквивалентны:
 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)
...