Если вы любите UNIX / Linux / BSD, как я, то вы определенно изучали Perl и программировали на нем. Я почти уверен, что вы также использовали Perl не один раз, возможно, несколько раз. Язык был создан в 1987 году как язык сценариев UNIX общего назначения, но с тех пор претерпел множество изменений (даже породил другой язык программирования, Raku).
Возможно, вы использовали его для случайных задач системного администратора, в вашей цепочке инструментов или для улучшения некоторых сценариев оболочки, которым требовалось больше ресурсов. Но Perl — это больше, чем просто написание сценариев.
Но судя по количеству разговоров о Perl на Reddit или Stack Overflow, вы можете подумать, что он мертв. Он далек от смерти и по-прежнему очень актуален для разработки программного обеспечения сегодня.
Что делает его особенным?
Основная сила Perl заключается в обработке текста. Будь то подход, основанный на регулярных выражениях, или иной, Perl отлично подходит для анализа файлов журналов, обработки текста, редактирования файлов на месте и поиска структурированных текстовых файлов в поисках определенных значений полей.
Perl очень удобен для Unix. Он может служить оболочкой вокруг инструментов Unix и полностью интегрирован в семантику операционной системы. В результате он превосходит каналы, обработку файлов, межпроцессное взаимодействие и другие сложные задачи. Он может создавать демонов Unix или серверные процессы, которые выполняются в фоновом режиме. Мы можем легко вызвать демон Perl, чтобы не тратить часы на работу с C и уменьшить недостатки безопасности.
Как npm для Node.js У Perl есть динамичное сообщество разработчиков в CPAN с обширным архивом модулей Perl. Вы можете найти модуль для выполнения всего, что захотите. Большинство модулей написаны на чистом Perl, хотя некоторые модули с высокой производительностью имеют компонент XS, который использует C для повышения производительности.
С помощью CPAN вы можете обернуть многие базы данных — SQLite, MySQL, Postgres и другие — в код Perl, используя модули драйвера базы данных (DBD). Они экспортируют операции с БД, используя собственную семантику Perl, в унифицированный переносимый код Perl, который скрывает сложности базы данных.
Perl поддерживает массивы, хэши и ссылки, используя которые, вы можете кодировать очень мощными способами, не задумываясь глубоко о структурах данных или алгоритмах. Большинство модулей CPAN предоставляют вам как процедурный стиль, так и объектно-ориентированный. Предоставляя вам такой выбор, вы в значительной степени можете выполнять свою задачу по-своему.
Какие проблемы делают Perl естественным?
Как указывалось выше, Perl очень хорошо справляется с обработкой текста. Он может просматривать CSV-файлы в поисках полей данных на основе сложных операторов регулярных выражений. Это инструмент выбора для анализа файлов журналов. Он может быстро редактировать файлы настроек. Perl также подходит для преобразования различных форматов, создания PDF-файлов, HTML или XML.
С первых дней существования Интернета Perl служил основой для множества базовых сетевых задач: общего интерфейса шлюза (CGI), MIME-декодирования в электронных письмах или управления веб-сайтами между клиентом и сервером. С тех ранних времен он сильно эволюционировал, став источником вдохновения для других экосистем и черпая вдохновение в других языках для развития.
Для опытных пользователей Unix Perl позволяет автоматизировать практически любое действие, которое вам нравится. Вы можете создавать демонов — небольшие, постоянно работающие программы, — которые будут автоматически выполнять действия при выполнении их условий.
Тестирование лежит в основе культуры Perl. Отличные наборы инструментов для тестирования и инфраструктуры лежат в основе методологий, пользующихся популярностью у сообщества. Любой модуль, загруженный в CPAN, будет автоматически проходить через * Отчеты тестировщиков CPAN, мультиплатформенный полигон для тестирования, который работает с 1998 года. Стандартные тесты Perl также можно запускать в обычных конвейерах сборки и CI / CD.
Гибкий и интересный способ кодирования
В современном асинхронном мире JavaScript, ориентированном на цикл событий, Node.js Как и TypeScript, Perl разработал способы решения проблем неблокирующего программирования.
Несмотря на то, что асинхронность не является фундаментальной частью ядра Perl, язык, как всегда, можно расширить с помощью модулей CPAN. Надежным примером является Future::AsyncAwait то, что предоставляет синтаксис для отсрочки и возобновления подпрограмм с ключевыми словами async и await. Альтернативой является Mojo::Promise реализация Promises / A + на языке Perl и надмножество обещаний ES6.
Perl включает в себя ряд специализированных операторов, которые обрабатывают данные уникальными способами. Вы можете использовать оператор diamond <> для обработки любого потока, файла, сокета, канала, именованного канала, чего угодно.
Оператор регулярных выражений =~ открывает дверь в богатый мир регулярных выражений Perl, которые могут сократить многие строки сложного кода до пары операций match и replace.
Perl подчеркивает философию получай то, что хочешь, так, как ты хочешь, также известную как TMTOWTDI.
Perl является Мультипарадигменным. В дополнение к процедурному или объектно-ориентированному, он допускает функциональное программирование. В зависимости от ситуации, он позволяет выбрать наиболее точную парадигму программирования. Предоставляя низкоуровневую объектно-ориентированную систему, надежные объектные наборы инструментов, такие как Moose, могут использоваться для производственного кода (из CPAN, а не основного модуля). Такие наборы инструментов значительно упрощают объектно-ориентированную парадигму для Perl.
Будущее Perl
Поскольку он продолжал развиваться, черпая вдохновение из других языков, он может предоставлять готовые к производству реализации для циклов событий, обещаний, объектно-ориентированного программирования. В последние несколько лет спецификации Corinna и Object::Pad реализация готовят внедрение современного ООП в ядро Perl.
Большое сообщество постоянно совершенствует его, и каждый выпуск предоставляет новые функции, которые выводят его на следующий шаг. Примечательными примерами являются:
- версия 5.34 предоставляет экспериментальный синтаксис try / catch и документацию perlgov, раскрывающую цели, область применения, систему и правила для новой модели управления Perl.
Пару лет назад был анонсирован Perl 7, который кладет конец путанице Raku / Perl и предлагает вывести на передний план лучшие из современных методов Perl.
Почему он все еще актуален в 2023 году
Perl никуда не денется, даже если он имеет тенденцию быть менее модным, чем другие современные языки.
Он используется в производственных базах кода многих компаний для таких разнообразных задач, как веб-разработка, доступ к базам данных, анализ журналов или сканирование веб-страниц. Это основной компонент большинства unix-подобных систем.
Многие устаревшие производственные системы полагаются на Perl, а новые приложения Perl процветают, используя современные наборы инструментов Perl, доступные через CPAN.
Если CGI был важной исторической частью культуры Perl до середины 2000 года, то в 2014 году он был удален из Perl core с версией 5.22. CGI некоторое время был рекомендуемым способом ведения веб-разработки; вместо этого отдайте предпочтение альтернативам, предоставленным сообществом. Двумя известными веб-фреймворками являются Dancer и Mojolicious.
С точки зрения привязок к другим библиотекам и утилитам Perl ничем не хуже других вариантов. Например, взаимодействие с libcurl или libtls или какой-либо сторонней библиотекой с открытым исходным кодом или базой данных может быть достигнуто с помощью любого языка, который нам нравится. Здесь Perl поддерживается "из коробки" и предоставляет простые способы выполнения работы.
Perl вполне способен идти в ногу с современными тенденциями. Код, который мы пишем сегодня, не совпадает с тем, который мы писали 20 лет назад. Другие языки повлияли на язык таким, каким он стал, и мы можем ожидать, что это продолжится, а экосистема будет расти.
Заключение
Perl всегда был очень примечателен своей документацией и руководствами — возможно, временами слишком многословными, — но, очевидно, они удобны для разработчиков.
Надеюсь, в этой статье приводятся убедительные и достаточно объективные аргументы в пользу Perl, основанные на текущих тенденциях, статистике использования и базе разработчиков. На программиста обычно влияют факторы, отличные от бизнес-потребностей или менеджера. В обоих случаях Perl оправдывает себя, поскольку предлагает удобство, быстрые сроки разработки, а также богатую поддержку сообщества и инструментарий.