2011-01-28 3 views
1

Я в настоящее время изучает программирование на Perl и бегу в отчетности, как это:Как работают функции, разделенные запятыми в perl?

return bless { }, $type; 

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

+4

благослови имеет два варианта: 'благословить REF, CLASSNAME' и' благословить REF'. Показанная нотация эквивалентна «return bless» (REF, CLASSNAME); ' –

ответ

5

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

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

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

+0

Итак, всякая запятая в perl - это отдельные элементы в списке? – chustar

+0

@chustar, «В скалярном контексте он вычисляет свой левый аргумент, выдает это значение, затем оценивает его правый аргумент и возвращает это значение». В контексте списка он просто разделяет элементы в списке. – cjm

2

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

благословение, 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) 
+0

* Объявлено * Функции Perl можно вызывать с круглыми скобками или без них. В этом отношении встроенные функции не являются особенными. –

+0

Вы правы, sub a {}; a 1,2; работает, но 1, 2; sub a {} - нет. –

Смежные вопросы