On 13 Aug 2014, at 23:10, Flore <[email protected]> wrote: > Эмм, возможно, я пропустила, но я бы добавила небольшое объяснение про > прототипы функции, что это спорная штука, и многие считают, что оно скорее > зло, чем добро.
Не то чтобы зло, просто очень специальная штука. А то что не про Method::Signatures, не про ням ням signatures в 5.20 ни слова — авторам полный и сплошной низачот. > И вот простой пример: допустим, есть функция, которая хочет два скаляра в > качестве аргументов, один обязательный, один нет (это будет записано как sub > func($;$)). Я завожу массив @arr = qw/a b/ и вызываю функцию от массива: > func(@arr). Логично будет подумать, что "а" положится в первый аргумент, а > "b" во второй. В 5.20 с сигнатурами всё по-человечески как ожидается. (На самом деле если прототипы уметь готовить, то их поведение тоже вполне логично. Но в любом случае их трогать за исключением 0.001% случаев не надо.) > Однако, это не так. Перл хочет скаляр, поэтому то, что он получает, он и > интерпретирует как скаляр, а получает он массив - и значит, он просто берёт > длину массива, то есть, 2, а второй аргумент функции у него будет > неопределён. И никакой ошибки не напишет, поэтому отследить это будет трудно. > Большая статья на тему: http://www.perlmonks.org/?node_id=861966 > Статья покороче: http://www.perlmonks.org/?node_id=406231 > > 13.08.2014, 19:34, "Andrey Asyakin" <[email protected]>: >> Ступил по поводу $_[0]{}, бывает. >> >> >> >> >> 13.08.2014 18:40, Victor Efimov пишет: >> >> 13 августа 2014 г., 18:14 пользователь Andrey Asyakin >> <[email protected]> написал: >> Критика) >> >> В статье написано, что в Perl параметры в функцию передаются по ссылке. >> Возможно правильней было бы написать, что элементы @_, $_[0], и т.д. >> являются алиасами, то бишь магическими переменными. >> Ссылка это ссылка все же, это может ввести в заблуждение. >> "пареметр по ссылке" - это больше общепрограммистский термин. >> >> >> https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29 >> === >> Передача параметра по ссылке означает что копируется не само значение, >> а адрес исходной переменной (как в случае передачи параметра по >> адресу), однако синтаксис используется такой, чтобы программисту не >> приходилось использовать операцию разыменования и он мог иметь дело >> непосредственно со значением, хранящимся по этому адресу (как в случае >> передачи параметра по значению). >> === >> >> как раз "не приходилось использовать операцию разыменования" >> >> но то что это алиасинг - согласен. это впринципе больше перловое. как >> раз не вижу отличий в алиасинге и "передаче по ссылке". магия тоже >> передаётся, но это внутренности перл. >> Кстати, хмм, не знал до недавнего момента, что с элеменами @_можно работать >> без разыменовывания: >> >> perl -E 'f({x => 42}); sub f { say $_[0]{x}, $_[0]->{x} }' >> а что тут необычного? ведь вроде считается что любой "->" между "]" и >> "{" можно просто удалить? >> 13.08.2014 16:30, Тимур Нозадзе пишет: >> >> Всем спасибо на добром слове. Мы старались. >> Но а как же конструктивная критика? ;) >> >> >> 13 августа 2014 г., 16:03 пользователь Denis Fedoseev >> <[email protected]> написал: >> Отличная статья, все просто и понятно - молодцы :) >> >> >> 13 августа 2014 г., 15:51 пользователь Naim Sh <[email protected]> >> написал: >> Ребята, вы молодцы . +1 >> >> >> On 08/13/2014 04:29 PM, Alexey Shrub wrote: >> Приветствую, >> >> да, вчера видал, бегло просмотрел, неплохо и весьма подробно описано >> >> Wed, 13 Aug 2014 13:17:51 +0400 от Тимур Нозадзе >> <[email protected]>: >> Мы тут, дабы принесть немного света в наш мир, коллективно соорудили >> статью: http://habrahabr.ru/company/regru/blog/232933/ . >> Между прочим, пользуется большим интересом среди хабрапользователей, >> что не может не радовать. И даже никто не троллит Perl в комментах. Так что, >> может быть, у Perl-сообщества ещё не всё так плохо. ;) >> Приглашаем всех поучаствовать в обсуждении. >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org >> -- >> С уважением, Денис Федосеев >> >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org >> -- >> С уважением, Тимур Нозадзе >> >> >> >> >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org >> > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
