Выпуск 24. Февраль 2015

Perl 6, или Get ready to party | Содержание | Интервью с Нилом Бауэрсом (Neil Bowers)

Обзор CPAN за январь 2015 г.

Рубрика с обзором интересных новинок CPAN за прошедший месяц.

В этом месяце заметно выросло число обновлённых модулей, что отчасти является следствием проводимого конкурса 2015 CPAN Pull Request Challenge.

Статистика

  • Новых дистрибутивов — 252
  • Новых выпусков — 1222

Новые модули

Shell::Tools

Shell::Tools отличное подспорье администраторам при написании небольших скриптов на Perl. При включении модуля загружается множество полезных функций для работы с файлами, каталогами, например, функции cwd, abs_path, basename, copy, make_path, tempfile и множество других. Кроме того, модуль автоматически добавляет функции VERSION_STRING и HELP_MESSAGE, которые соответственно вызываются, если указываются параметры скрипта --version и --help. Версия берётся из переменной $VERSION, а текст помощи из встроенной POD-документации скрипта.

Mojo::Reactor::POE

Mojo::Reactor::POE позволяет использовать модуль POE в качестве бекенда для обработки событий в Mojo::IOLoop. Необходимо лишь задать переменную окружения MOJO_REACTOR до загрузки Mojo::IOLoop:

BEGIN { $ENV{MOJO_REACTOR} ||= 'Mojo::Reactor::POE' }
use Mojo::IOLoop;

FFI::Me

Модуль FFI::Me предоставляет удобный способ вызывать функции из C-библиотек, не применяя XS-магии. Модуль базируется на FFI::Raw и просто добавляет немного синтаксического сахара для удобства использования:

package My::Trig;
use FFI::Me;
...
ffi cosine => (
    lib => 'libm.so'
    rv  => ffi::double,
    arg => [ffi::double],
    sym => 'cos',
    method => 1,
);

package main;

my $trig = My::Trig->new;
$trig->cosine(2.0);

HTML::Differences

Модуль HTML::Differences даёт вменяемый способ найти различия между двумя HTML-файлами или фрагментами HTML-документов. Под капотом используется HTML::Parser, таким образом применяется разбор тегов и строится модель HTML-документа. Для построения различий игнорируются лишние пробелы (за исключением текста в <pre>), начальные теги нормализуются, сортируются их атрибуты. Отсутствующие закрывающие теги не добавляются автоматически, поэтому они будут видны в выводе отличий двух документов. Отличия в блоках комментариев также будут видны, но можно задать флаг для игнорирования различий в них.

Plack::App::Hostname

Plack::App::Hostname позволяет организовать функцию виртуального хостинга в PSGI-приложении: вызов приложения, в зависимости от имени, указанного в запросе заголовка Host.

DTL::Fast

Модуль DTL::Fast — это реализация языка шаблонов Django для Perl. Реализована поддержка большинства тегов, но есть определённые несовместимости с оригинальной спецификацией. Приведены результаты бенчмарков, по которым DLT::Fast работает на 80% быстрые, чем оригинальный питоновский шаблонизатор Django.

Crypt::Spritz

Марк Леманн представил реализацию нового поточного шифра Spritz для Perl. Алгоритм Spritz уникален тем, что имеет многостороннее применение: и как потоковый шифр, и как генератор случайных чисел, хеш и аутентифицированное шифрование.

Data::Fake

Модуль Data::Fake позволяет генерировать случайные данные разных типов, использую декларативный синтаксис, например:

fake_name() --- произвольное имя
fake_sentences(1) --- произвольное предложение
fake_past_date("%Y-%m-%d") --- произвольная дата в прошлом

Модуль позволяет создавать не только простые структуры данных, но также хеши и массивы. Основное применение — данные для тестов.

FFI::Platypus

Platypus (с англ. утконос) — это ещё один модуль для динамического вызова функций библиотек на С/C++ в Perl без использования XS. Данная реализация использует библиотеку libffi. Platypus имеет хорошо продуманную систему типов, которая позволяет работать не только с простыми типами int, float и прочими, но и со сложными структурами данных.

Plack::I18N

Модуль Plack::I18N позволяет добавить поддержку интернационализации в ваше веб-приложение. Поддерживаются как традиционные po-файлы переводов gettext, так и pm-файлы модуля локализации Locale::Maketext.

Модуль включается в приложение как прослойка Plack::Middleware::I18N, которая позволяет определять предпочитаемый язык веб-клиента (по PATH_INFO, сессии, http-заголовка Accept) и соответствующим образом формировать переменную окружения plack.i18n.

Обновлённые модули

Dancer2 0.158000

Новая версия Dancer2 вышла в первый день нового года. В новом релизе включены несколько важных исправлений, в том числе правильный импорт прагмы utf8 в код приложения, что само по себе очень поучительно и полезно знать каждому Perl-программисту.

DateTime 1.18

В новом релизе добавлены данные о новой секунде координации, которая будет добавлена 30 июня 2015 г. Ждём новых зависаний серверов этим летом.

Twiggy 0.1025

Новый релиз асинхронного веб-сервера Twiggy исправляет ошибку, когда во время потоковой передачи клиент неожиданно завершает соединение, что приводит к остановке всего процесса веб-сервера.

perlsecret 1.012

Новый релиз секретных операторов Perl содержит описание нового секрета — Змей-искуситель (Serpent of truth).

my $true  = ~~!! 'a string';    # 1
my $false = ~~!! undef;         # 0

Он составлен из двух операторов: ~~ (червяк) и !! (пиф-паф) и аналогичен по действию оператору 0+!! (ключ к правде). Позволяет превратить логическое значение в цифровое.

Cpanel::JSON::XS 3.0115

Обновлённый Cpanel::JSON::XS содержит исправление ошибки при кодировании вложенных объектов методом FREEZE, которая могла приводить к повреждению стека и аварийному завершению процесса. Скорее всего проблема присутствует и в оригинальном JSON::XS, но о его исправлении ничего неизвестно.

Markdent 0.25

Парсер Markdown-разметки Markdent теперь генерирует HTML-документ в соответствии с спецификацией HTML 5. Также исправлена ошибка с использованием закрывающего тега </th> для всех ячеек при генерации таблиц.

DBD::Pg 3.5.0

DBD::Pg — драйвер базы данных PostgreSQL для DBI DBD::Pg теперь поддерживает экранирование символа подстановки ?. Например, следующий запрос содержит JSONB-оператор ? и один символ, который будут заменён значением:

SELECT '{"a":1, "b":2}'::jsonb \? ?

IO::Socket::SSL 2.010

В новом релизе IO::Socket::SSL появилась поддержка расширения ALPN, которое используется в протоколе HTTP2 (требуется openssl ≥ 1.02, Net::SSLeay ≥ 1.56). Удалено анонсирование слабого шифра RC4.

perl 5.21.8

Выпущен девятый релиз Perl для разработчиков 5.21.8. Среди новшеств стоит отметить новый флаг регулярных выражений n, который отключает захват и заполнение переменных $1, $2 и т.д. внутри групп:

"hello" =~ /(hi|hello)/n; # $1 не устанавливается

Появился экспериментальный атрибут const для анонимных функций, который тут же запускает функцию, фиксирует возвращаемое значение и возвращает функцию-константу:

*INLINED = sub : const { $x }

Таким образом, даже если переменная $x будет изменена в будущем, функция INLINED всегда будет возвращать только то значение, которое было в момент присвоения INLINED.

Появилось несовместимое изменение для экспериментальных сигнатур, теперь прототип необходимо указывать не до, а после сигнатуры, что является более естественным:

sub sum ($left, $right) : prototype($$) {
    return $left + $right;
}

Несколько обескураживающим выглядит изменение в прагме warnings. Теперь появились предупреждения вне категории all. Дерево категорий теперь выглядит так:

everything -+
            |
            +- all -+
            |
            .........
            |
            +- extra -+

Теперь, чтобы охватить все-все-все возможные предупреждения придётся писать

use warnings 'everything';

Font::FreeType

Описание прислал basiliscos, который теперь сопровождает модуль Font::FreeType

После 10 лет стагнации обновился модуль Font::FreeType, который представляет собой Perl-обвязку для библиотеки FreeType2. FreeType2 является кроссплатформенным высококачественным движком для работы с векторными и растровыми шрифтами разных типов (ttd, odf, bdf и др.). Например, есть возможность рендеренга глифов шрифтов.

В новой версии Font::FreeType:

  • исправлена сборка и компиляция модуля для более современных версий библиотеки FreeType2;
  • демонстрационный скрипт examples/font-info.pl выводит больше информации, напоминая вывод ftdump из набора демонстрационных утилит FreeType;
  • возможность получения дополнительных метрик шрифтов, таких как высота шрифта (text_height), размер глифов, находящихся над и под базовой линией (ascender и descender), ограничивающего минимального прямоугольника (bounding box);
  • возможность доступа к таблицам кодировок шрифтов (CharMap);
  • возможность получения мета-информации о шрифте (NamedInfo), такой как авторские права, лицензия, сайт автора шрифтов и т.п.

Modern::Perl 1.20150127

Модуль Modern::Perl традиционно выходит в начале года. Теперь запись

use Modern::Perl '2015';

включает новые возможности релиза perl 5.20.

Владимир Леттиев


Perl 6, или Get ready to party | Содержание | Интервью с Нилом Бауэрсом (Neil Bowers)
Нас уже 1393. Больше подписчиков — лучше выпуски!

Комментарии к статье