среда, 21 апреля 2010 г.

Тест на понимание Perl: Вопрос 4

Вопрос:
sub a{&b; print shift}
sub b{print shift} 
a(1,2);

Ответ: 12

Пояснение:
Главная особенность состоит в том, что вызов функции &b происходит без круглых скобок и с использованием амперсанда. То есть вызов &b b(), &b() - это разные вызовы и каждый имеет свою особенность.
b() - классический вызов функции
&b() - аналогично первому варианту, но игнорируются прототипы
&b   - если функция вызывается таким образом, то в нее передается  массив @_, и я думаю, что мало кого это удивит... 
но важно то, что вызовы &b(@_) и &b - имеют отличия
в обоих случаях в функцию b придет список аргументов родительской функции, но в случае с &b(@_) это будет копия(локализированный массив), а в случае с &b, в функцию попадет оригинальный массив @_ и если сделать изменения в b, то они произойдут в @_ родительской функции.


1 коммент.:

Tiboro комментирует...

вот вот! а я perl программистом в страховой компании работаю, софт для внутренних нужд делаем, и за время работы понял, что почерков на perl столько же сколько и программистов)

Отправить комментарий

Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)