[Moscow.pm] Пост на Хабре ?Функции в Perl?
Antonio Nikishaev
a на lelf.me
Ср Авг 13 12:58:59 PDT 2014
On 13 Aug 2014, at 23:10, Flore <flore at ya.ru> 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" <asan999 at gmail.com>:
>> Ступил по поводу $_[0]{}, бывает.
>>
>>
>>
>>
>> 13.08.2014 18:40, Victor Efimov пишет:
>>
>> 13 августа 2014 г., 18:14 пользователь Andrey Asyakin
>> <asan999 at gmail.com> написал:
>> Критика)
>>
>> В статье написано, что в 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
>> <denis.fedoseev at gmail.com> написал:
>> Отличная статья, все просто и понятно - молодцы :)
>>
>>
>> 13 августа 2014 г., 15:51 пользователь Naim Sh <shafiev at gmail.com>
>> написал:
>> Ребята, вы молодцы . +1
>>
>>
>> On 08/13/2014 04:29 PM, Alexey Shrub wrote:
>> Приветствую,
>>
>> да, вчера видал, бегло просмотрел, неплохо и весьма подробно описано
>>
>> Wed, 13 Aug 2014 13:17:51 +0400 от Тимур Нозадзе
>> <timur.nozadze at gmail.com>:
>> Мы тут, дабы принесть немного света в наш мир, коллективно соорудили
>> статью: http://habrahabr.ru/company/regru/blog/232933/ .
>> Между прочим, пользуется большим интересом среди хабрапользователей,
>> что не может не радовать. И даже никто не троллит Perl в комментах. Так что,
>> может быть, у Perl-сообщества ещё не всё так плохо. ;)
>> Приглашаем всех поучаствовать в обсуждении.
>> --
>> Moscow.pm mailing list
>> moscow-pm at pm.org | http://moscow.pm.org
>> --
>> С уважением, Денис Федосеев
>>
>> --
>> Moscow.pm mailing list
>> moscow-pm at pm.org | http://moscow.pm.org
>> --
>> С уважением, Тимур Нозадзе
>>
>>
>>
>>
>> --
>> Moscow.pm mailing list
>> moscow-pm at pm.org | http://moscow.pm.org
>> --
>> Moscow.pm mailing list
>> moscow-pm at pm.org | http://moscow.pm.org
>>
> --
> Moscow.pm mailing list
> moscow-pm at pm.org | http://moscow.pm.org
Подробная информация о списке рассылки Moscow-pm