Программы
Почему я использую Perl

Почему я использую Perl

Пара слов о замечательных особенностях Perl

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

На пайтоне я писал тоже и доволен этим языком. Этакий скриптовый java — низкий порог вхождения, тысячи программистов — самое оно для больших проектов с десятками разработчиков.

Однако, скучно, господа, скучно! Весь код превращается в поэму, в которой код льётся непрерывным потоком а блоки кода в лучшем случае распознаются по именам функций. В худшем — построчный разбор: что да как.

Мало семантики, много букв.

И вряд ли кому придёт в голову заняться мета-программированием Python’а.

С другой стороны — Perl — язык сложный и неоднозначный (не только в смысле синтаксиса, но и политически). Но за сложностью зачастую стоит и красота.

Мне нравится выразительность Perl’а — если ты видишь $ — значит общаешься с переменной в скалярном контексте, если @ — то в списковом, % — привет хешам! Так гораздо понятнее, чем «If it quacks like a duck and swims like a duck then it’s a duck». Если видишь map — значит меняют список, если grep — значит что-то ищут!

Жутко не нравятся языки без точек с запятой в конце мысли. Это же как знак «ага, вот теперь мы закончили — переходим дальше». Да, я пишу питоний код с «;» в конце, но зачастую надо читать и чужой код…

Некоторые жалуются, что фигурные скобки засоряют код. То есть постоянные отступы и «\» в конце строчек — это не проблема?

my $a = Model::Article->new (
           name => 'Гоша',
           blog => 'http://gosha.bugov.net'
        );
   $a->save;

Кстати, да, будь благословлён, use strict;

Ещё один замечательный факт: Perl язык мультипарадигменный, в то время как Python уж сильно ушёл в ООП. Это не плохо и для тысяч программистов это даже прекрасно. Но ограничивает кругозор.

А если не объекты, то что же является атомарным объектом (в этом случае объект — не термин ООП) в Perl? На мой взгляд, это данные. И здесь появляются ещё 2 замечательные особенности Perl’а — операция разыменования, дающая нам работать и с функциями как с переменными и функция tie, позволяющая привязать к скаляру абсолютно любое поведение.

Ну и в конце хочется упомянуть главную особенность Perl’а — магию. Зависимость от контекста, специальные переменные — всё то, что раздражает новичков — всё это делает Perl не просто инструментом в руках ремесленника, а языком, на котором составляются заклинания. Это отражается и на программистах, пишущих на нём. Вместо

# Some initional code
sub AUTOLOAD {

Зачастую можно увидеть

# "These old doomsday devices are dangerously unstable.
# I'll rest easier not knowing where they are."
sub AUTOLOAD {
Изображение Python 3.11. Что нового?