2023/07/06 22:17:47

Perl

Practical Extraction and Report Language - язык PERL - свободно распространяемый интерпретируемый язык. Создан Ларри Уоллом (Larry Wall) в 1986 г. Обычно используется для создания динамически генирируемых веб-страниц. Используется также системными администраторами и веб-мастерами для работы и изменения текстов, файлов и процессов.

Содержание

Perl - интерпретируемый язык, приспособленный для обработки произвольных текстовых файлов, извлечения из них необходимой информации и выдачи сообщений. Perl также удобен для написания различных системных программ. Этот язык прост в использовании, эффективен, но про него трудно сказать, что он элегантен и компактен. Perl сочитает в себе лучшие черты C, shell, sed и awk, поэтому для тех, кто знаком с ними, изучение Perl-а не представит особого труда. Cинтаксис выражений Perl-а близок к синтаксису C. В отличие от большинства утилит ОС UNIX Perl не ставит ограничений на объем обрабатываемых данных и если хватает ресурсов, то весь файл обрабатывается как одна строка. Рекурсия может быть произвольной глубины. Хотя Perl приспособлен для обработки текстовых файлов, он может обрабатывать так же двоичные данные и создавать .dbm файлы, подобные ассоциативным массивам. Perl позволяет использовать регулярные выражения, создавать объекты, вставлять в программу на С или C++ куски кода на Perl-е, а также позволяет осуществлять доступ к базам данных, в том числе Oracle.

Этот язык часто используется для написания CGI-модулей, которые, в свою очередь, могут обращаться к базам данных. Таким образом может осуществляться доступ к базам данных через WWW.

2023: Perl 5.38.0

3 июля 2023 года стало известно о том, что после 13 месяцев разработки опубликован релиз стабильной ветки языка программирования Perl - 5.38. При подготовке выпуска было изменено около 290 тыс. строк кода, изменения затронули 1500 файлов, в разработке приняли участие 100 разработчиков.

Perl 5.38.0

Как сообщалось, ветка 5.38 выпущена в соответствии с утверждённым десять лет назад фиксированным графиком разработки, подразумевающим выпуск стабильных веток раз в год и корректирующих релизов - раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.38.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.38.0. Одновременно с выходом Perl 5.38 прекращена поддержка ветки 5.34, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.39, на базе которой в мае или июне 2024 года будет сформирован стабильный релиз Perl 5.40, если не будет принято решение перейти к нумерации 7.x.

Ключевые изменения:

  • Предложен экспериментальный синтаксис создания классов, в которых могут определяться поля и методы, привязанные к каждому экземпляру класса. Классы расширяют возможности работы с объектами в Perl и позволяют использовать более близкий к другим языкам программирования синтаксис (ранее подобие объектной модели в Perl 5 основывалось на применении иерархии, привязанной к именам пакетов).
  • Определение классов похоже на создание пакетов при помощи блока "package", за исключением необходимости инициализации класса с запуском конструктора ("my $object = My::Class->new(%arguments);") для создания отдельного экземпляра класса, с которым в последующем ведётся работа. Для выполнения своего кода во время инициализации предложен блок "ADJUST", напоминающий блок "BEGIN". Возможно наследование классов, используя атрибут ":isa".
  • Переменные, определяемые внутри класса при помощи ключевого слова "field", видны только внутри класса - для каждого экземпляра класса создаётся отдельное хранилище полей, не пересекающиеся с другими экземплярами того же класса. Методы позволяют определить работающие в контексте класса функции.

use feature 'class';

class Example::Base { field $x;

ADJUST { $x = "Hello, world"; }

method print_message { say $x; }


}

class Example::Subclass :isa(Example::Base) { ... }

Example::Base->new->print_message;

  • В предупреждения, выводимые при использовании в коде устаревших возможностей, добавлена привязка к подкатегориями, которые могут отключаться по отдельности. Например, для отключения вывода предупреждения об использовании конструкции goto, но сохранении остальных предупреждений, можно указать "no warnings 'deprecated::goto_construct'".
  • Предложен служебный хэш "%{^HOOK}", позволяющий создавать функции-обёртки для ключевых слов. В текущем виде доступны для определения две обёртки - "require__before" и "require__after", позволяющие привязать обработчики, вызываемые на разных стадиях обработки ключевого слова "require".

my $old_hook = ${^HOOK}{require__before}; local ${^HOOK}{require__before} = sub { my $old_hook_ret; $old_hook_ret = $old_hook->($name) if $old_hook; warn "Requiring: $name\n"; ... };

  • Добавлена переменная окружения PERL_RAND_SEED, через которую можно выставить свою затравку для генератора псевдослучайных чисел (например, для достижения повторяемого поведения во время тестирования).
  • Добавлена поддержка операторов "//=" и "||=" для определения значений по умолчанию аргументов функций. Выставленное через оператор "//=" значение применяется, если аргумент не определён (undef), а оператор "||=" применяется, если аргумент содержит логическое значение "false" или отсутствует).

sub foo ($name //= "world") { print "Hello, $name"; } sub foo ($x ||= 10) { return 5 + $x; } foo(undef); # будет выведено "Hello, world"

  • Поддержка спецификации Unicode обновлена до версии 15.0.
  • В некоторых случаях внутри блоков "defer" (отложенные блоки, выполняемые в самом конце) и "finally" (блок с кодом, выполняемый в самом конце конструкции try/catch) разрешено использование оператора "goto". Применение goto допускается только при использовании постоянных меток перехода, которые не выходят за пределы блока.

use feature 'defer';

defer { goto LABEL; print "This does not execute\n"; LABEL: print "This does\n"; }

  • На стадии компиляции обеспечено выявление недопустимого выхода из блоков defer или finally при помощи операций return или goto. Ранее подобные запрещённые манипуляции выявлялись только в момент выполнения проблемного кода, а теперь ошибка выводится сразу.
  • Для выполнения блоков кода внутри regex-шаблона добавлена конструкция "*{ ... }", которая эквивалентна конструкциям "?{ ... }" и "??{ ... }", за исключением того, что её использование не приводит к отключению оптимизации в движке регулярных выражений, из-за чего повышается производительность, но поведение становится менее стабильным.

"good" =~ /g(?:o(*{print "o"}))*d/;

  • Размер квантификаторов регулярных выражений (REG_INF) увеличен с 65 536 до 2 147 483 647 (c U16_MAX до I32_MAX), что позволяет использовать конструкции вида "/(?:word){1000000}/".
  • Добавлены функции optimize_optree и finalize_optree для работы с фрагментами внутренней структуры optree.
  • В движке регулярных выражений реализована переменная ${^LAST_SUCCESSFUL_PATTERN}, при помощи которой можно получить доступ к последнему успешно выполненному шаблону.

if (m/foo/ || m/bar/) { s/${^LAST_SUCCESSFUL_PATTERN}/PQR/; }

  • Добавлена поддержка категории локали LC_NAME, которую можно указывать при вызове "setlocale".
  • Изменения, нарушающие совместимость: В функции readline() и операторе "<>" после ошибки при обработке потока прекращена очистка флагов, сигнализирующих конец файла или ошибки. Прекращено выполнение блоков INIT после вызова exit() в секции BEGIN.
  • Объявлено устаревшим использование символа " ' " в качестве разделителя имён пакетов[1].

2010: Perl 6

Создатель языка Perl Ларри Уолл ежегодно выступает с публичной речью, посвященной прогрессу в области разработки своего детища. В 2010 году выступление прошло в рамках конференции O’Reilly Open Source Convention, и Уолл в своей речи намекнул, что шестая, капитально обновленная версия Perl, разработка которой идет уже около десяти лет, возможно, вскоре наконец будет выпущена.

Как и в предыдущие годы, Уолл продемонстрировал ряд новых возможностей Perl 6.

Например, если задать языку последовательность цифр, он способен угадать следующее число в ряду. Так, команда «(1,3,5,7, ....*)» вернет набор из 20 нечетных чисел, начиная с единицы, а по команде «(1,2,4, ....*)» будет выдана последовательность из степеней двойки.Рынок аутсорсинга информационной безопасности в России: особенности развития и перспективы. Обзор TAdviser 6.2 т

Уолл порассуждал на тему о том, станет ли Perl 6 «прорывной технологией». По его мнению, этот термин сейчас настолько часто используется, что практически потерял смысл, но все же он заслуживает существования. Как полагает Уолл, «прорывную технологию» можно определить как превосходящую по значимости существующие, даже если она в чем-то уступает предшественнице.

Уолл убежден, что ранние версии Perl стали прорывными для сообщества Unix, поскольку не следовали изначальной идеологии этой операционной системы «делать что-то одно, но делать хорошо». Разработчики Perl с гордостью подчеркивают, что в Perl любую задачу можно решить несколькими способами.

Недостаток подхода Unix, по мнению Уолла, состоит в том, что в реальности лишь немногие из утилит этой операционной системы идеально выполняли свои функции.

«Они все были полны искусственных ограничений, — полагает Уолл. — Системным администраторам приходилось тратить массу усилий, чтобы согласовать между двумя утилитами формат данных для какой-либо операции, и каждая такая операция неизбежно приводила к созданию массы маленьких файлов, разбросанных по каталогу. Perl же способен работать в обход оболочки Unix, оставляя данные в самой программе».


По данным исследования, представленного аналитической компанией W3Techs в конце 2011 года, использование языка программирования Perl на веб-серверах упало ниже уровня 1%. Когда-то самый популярный скриптовый язык Perl занимает всего лишь пятое место по популярности с долей в 0,997%.

По мнению экспертов W3Techs, эта доля соответствует использованию Perl на сайтах, число которых измеряется миллионами, что `совсем не плохо` с учетом того, что веб-серверы, построенные на основе Ruby и Python, занимают менее 1% в Сети.

Эксперты W3Techs также отмечают небольшую, но весьма значимую, по их мнению, тенденцию: за последнее время 4,1% сайтов с Perl переведены на PHP, но в то же время 2,7% всех сайтов с поддержкой Perl использовали до недавнего времени язык PHP.

Языки программирования

Примечания