|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 01 Aug 2003 15:00:56 To : Alexander Orlovsky Subject : Re: Вопросы по Camelbook -------------------------------------------------------------------------------- Хмутро. AO> Вот решил прочитать таки Camelbook полностью с начала, не обходя непонятные AO> вещи. AO> Соответственно вопросы есть. Думаю, спрашиваю в правильном месте. AO> Итак, сегодняшняя "порция" ;) AO> 1) стр 273, "прототипы" AO> пользовательская функция try: AO> sub try(&$){ # <----(*) AO> my ($try, $catch) = @_; AO> eval { &$try }; AO> if ($@) { AO> local $_ = $@; # <---(**) AO> &$catch; AO> } AO> } AO> Вопросы: AO> a.(*) прототип для параметров функции &$ что означает ссылку или анонимную AO> подпрограмму, тем не менее из @_ берется 2 таких ссылки (анонимнык AO> подпрограммы) Hо ведь в описании только одна указана? (см (*)) Прототип означает ссылку на функцию (оно же "анонимная подпрограмма") _и_ скаляр. AO> b.(**) Тут даже не вопрос, а уточнение. В строке (**) делается локальная AO> копия глобальной переменной $@ чтобы после отработки catch было доступно AO> ее старое значение. Угу. AO> 2 стр 275. AO> упоминается, что при разных прототипах: AO> sub func { } и sub func() { } AO> функция func() имеет "разную семантику вызова" и что "надо быть AO> осторожным" с этим. Что под этим подразумевается? Просто, я не вижу AO> проблемы, т.к. в первом случае функции просто передаются аргументы, а во AO> втором нет. А семантика вызова тут при чем? Можно проиллюстрировать? sub func { return 2 }; print func+2; И то же самое с прототипом. Читать там же, в perldoc perlsub. -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/114777b9276cb.html, оценка из 5, голосов 10
|