Как func2 знает контекст? - PullRequest
0 голосов
/ 29 июля 2011
func1(func2);

Как мы знаем, Perl должен знать контекст для оценки, но в вышеприведенном случае как func2 узнает, что он находится в скалярном или списочном контексте?

Ответы [ 2 ]

5 голосов
/ 29 июля 2011

Если у func1 нет прототипа (или @ прототипа), это будет контекст списка.Если у func1 есть прототип $, то это будет скалярный контекст.

Предупреждение: не используйте прототипы, они злые .

2 голосов
/ 29 июля 2011

По-видимому.это список.

$ perl
sub f1 { print "called f1\n" } 
sub f2 { print "called f2\n"; print wantarray ? "list": "scalar"; print "\n"; }
f1(f2);
^d
called f2
list
called f1

Почему?Это совсем другой вопрос - я полагаю, потому что параметры функций являются неявными списками, что бы ни случилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...