Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Ушла эпоха

Примерно в начале двухтысячных много программировал на Перле. Сейчас его заслуженно не любят, а в те времена на нём делалось много веба. С того времени прошла пара десятилетий, но меня почему-то всё не отпускает — время от времени интересуюсь что происходит с этим языком.

Вообще, Перл я любил, но была одна вещь, от которой меня некисло бомбило — это синтаксис передачи параметров в функции. Полюбуйтесь:

print sub {
    my ($a, $b) = @_;
    return $a + $b;
}->(1, 2);

Язык помещает параметры в специальную переменную @_ (с символа «собачки» в Перле начинаются массивы), откуда их можно достать любыми способами, которые подходят для массива. Всратейший синтаксис с кучей граблей. Самые очевидные — в случае копирования единственного параметра забыть скобки вокруг переменной и получить вместо параметра длину массива аргументов. Так устроен Перл — при присваивании массива скаляру мы получаем его длину.

Самые аккуратные ребята могли бы задавать так называемые «прототипы», где в специальных значках выражалось что функции хотелось бы получить на вход, например вот так: $$$;$. Но такое в чужом коде я видел только в учебниках, так как этот птичий язык мало кто помнил.

И вот недавно я читаю, что в версии 5.36 зарелизили синтаксис сигнатур, позволяющий явно определить параметры функции, полюбуйтесь какая красота:

use v5.36;

sub range($from, $to, $step = 1) {
    my $current;
    return sub {
    	($from, $current) = ($from + $step, $from);
        return undef if $current > $to;
        return $current;
    }
}

my $iter = range(0, 256);
while (defined (my $v = $iter->())) {
    print $v, "\n"
}

Теперь всё как у всех — аргументы сразу имеют нормальные имена, а чтобы понять что у нас опциональное, не надо считать количество знаков в прототипе.

Не знаю зачем Перл до сих пор ковыряют, но времена у нас нынче самые неожиданные, вдруг он по какой-то нелепой причине опять ворвётся в тренды.

5 комментариев
Дмитрий 2022

Не знаю зачем Перл до сих пор ковыряют, но времена у нас нынче самые неожиданные, вдруг он по какой-то нелепой причине опять ворвётся в тренды.

Ну, когда ворвется, тогда и вспомним. Удачного пути, «Перл»!

Евгений Степанищев 2022

Да, я его тоже непонятно зачем помню ) Странно, 20 лет прошло, а помнится хорошо)

Михаил Иванов 2022

Пока еще есть большая база унаследованного кода. Поэтому кому-то приходится ковырять. Но новых проектов, конечно, уже не начинают.

Евгений Степанищев 2022

Для чего-то его совершенствуют же.

hshhhhh.name 2022

Для чего-то его совершенствуют же.

так разве сам автор не потерял к нему интерес переименовав perl 6 в raku?

Евгений Степанищев 2022

Так там два Перла существуют, а не один ) Первый — Perl 5, второй — Raku (бывший Perl 6), оба развиваются параллельно многие годы. Переименование сделано не из-за потери интереса, а из-за того, что Perl 6 превратился в другой язык, совершенно несовместимый с Perl 5.

Евгений 2022

Да кому нужен этот «Перл»?

Евгений Степанищев 2022

Задаюсь тем же вопросом.

Перл 2022

Перл-перл

Евгений Степанищев 2022

а?