Выпуск 33. Ноябрь 2015
← Perl 6 для веба | Содержание | Интервью с Рикардо Мартинесом →Обзор CPAN за октябрь 2015 г.
Рубрика с обзором интересных новинок CPAN за прошедший месяц.
Статистика
- Новых дистрибутивов — 182
- Новых выпусков — 791
Новые модули
PEF::CacheLRU
PEF::CacheLRU
— это реализация алгоритма кеширования LRU (вытеснение давно неиспользуемых ключей) на чистом Perl. В описании модуля приводится сравнение производительности с реализацией Cache::LRU
, в котором PEF::CacheLRU
оказывается существенно более быстрым.
Term::Choose_HAE
С помощью модуля Term::Choose_HAE
можно создавать консольные интерактивные меню для выбора одного или нескольких значений из списка. В отличие от Term::Choose
, данный модуль не удаляет экранирующие последовательности ANSI, что позволяет использовать цвета для элементов меню. Также появилась опция fill_up
, которая задаёт стиль закраски курсора.
Exporter::Attributes
Exporter::Attributes
позволяет указывать какие символы модуля могут быть экспортированы или экспортируются по умолчанию с помощью атрибутов. Например, сравнение с Exporter:
package My::Module; | package My::Module;
use Exporter; | use Exporter::Attributes qw(import);
|
our @EXPORT = qw(foo bar); | sub foo : Exported;
| sub bar : Exported;
|
our @EXPORT_OK = qw(baz); | sub baz : Exportable(qux);
our %EXPORT_TAGS = |
qw(qux => [qw(baz)]); |
Модуль является аналогом Exporter::Simple
, который уже давно заброшен и не работает на современных версиях Perl.
Devel::Unstate
Модуль Devel::Unstate
позволяет превратить state-переменные в my. Это может быть полезно при тестировании, когда требуется, чтобы данные в кеше обновлялись при каждой итерации теста. Эффект действия Devel::Unstate
глобальный, но затронуты будут только те переменные, которые были объявлены после загрузки модуля.
IPC::Lockfile
IPC::Lockfile
— это реализация классического способа обеспечения запуска только одного экземпляра текущей программы путём установки лока на исходный код программы:
open SELF, "< $0" or die ...;
flock SELF, LOCK_EX | LOCK_NB or exit;
Вероятно, до сих пор ради двух строчек кода никто больше не рисковал создать целый модуль.
Perlito5
Впервые на CPAN выложен компилятор Perl 5, написанный на Perl 5. Компилятор позволяет также транслировать Perl 5 код в любой из поддерживаемых бекендов: js, perl5, perl6, xs, java. Таким образом, существует возможность для бутстрапа самого Perlito5, например в js-код, тем самым позволив запускать Perl 5 программы на node.js и, вероятно, и в браузере:
$ perlito5 --bootstrapping -Cjs \
`which perlito5` > perlito5.js
$ node perlito5.js -e ' print "hello, world!\n" '
hello, world!
Acme::Test::VW
Скандал вокруг дизельных двигателей Volkswagen оставил свой след и в фольклоре программистов. В октябре стали появляться реализации модулей, которые при детектировании выполнения тестов внутри автоматизированных систем CI/QA делают все падающие тесты успешными. Для Perl был создан модуль Acme::Test::VW
, который при запуске тестов в CPAN Testers, Jenkins, Travis CI и других системах всегда будет давать успешный результат.
# export PERL5OPT=-MAcme::Test::VW
use Test::More;
ok 1 == 2;
done_testing;
Acme::Excuse
В отличиe от Acme::Test::VW
, Acme::Excuse
не пытается скрыть наличие ошибок в вашем коде, но зато пытается найти оправдание им. В случае, если происходит фатальная ошибка, Acme::Excuse
загружает и выводит сообщение с сайта www.programmerexcuses.com:
$ perl -MAcme::Excuse -e 'use Perl or die'
Well done, you found my easter egg!
App::Mimic
Если же так получилось, что в вашем коде нет багов, то их можно добавить, причём так, что найти их будет совсем непросто. Утилита mimic
может внести случайные изменения в исходный код программы, выполняя замену ASCII-символов на схожие Юникод омоглифы, например:
- ;
U+003B
SEMICOLON - ;
U+037E
GREEK QUESTION MARK - ﹔
U+FE54
SMALL SEMICOLON - ;
U+FF1B
FULLWIDTH SEMICOLON - ︔
U+FE14
PRESENTATION FORM FOR VERTICAL SEMICOLON
Выводимые сообщения об ошибках могут поставить в тупик любого перловика.
Обновлённые модули
Test::Stream 1.302021
Преемник Test::More
и Test::Builder
модуль Test::Steam
теперь больше не имеет статуса экспериментального, что вполне можно интерпретировать, как сигнал к началу использования. Также если заявленный грант для Test::Stream будет принят, то это в скором времени приведёт к созданию подробного мануала по использованию модуля.
Gazelle 0.36
В новой версии высокопроизводительного веб-сервера Gazelle появилась экспериментальная поддержка FreeBSD, а также исправлена проверка наличия системного вызова accept4
.
EV::ADNS 3.0
Вышел новый мажорный релиз модуля EV::ADNS
для выполнения асинхронных DNS-запросов с помощью библиотеки adns и EV. Появилась поддержка ipv6, произошёл переход на libev 4 API, реализован вызов EV::ADNS::reinit
для сброса всех выполняющихся запросов и реинициализации библиотеки adns.
Data::Alias 1.20
Обновлён модуль Data::Alias
, предоставляющий набор подпрограмм для выполнения операций с алиасами (псевдонимами). Новая версия теперь собирается и работает на Perl 5.22, но в документации теперь указывается, что появившиеся в Perl 5.22 средства по созданию алиасов работают гораздо надёжнее и лучше сопровождаются, хотя их синтаксис отличается, и функционал не так богат. Поэтому если вы используете последние версии Perl в разработке — есть смысл отказаться от использования Data::Alias
.
BSD::Resource 1.2908
В новой версии BSD::Resource добавлено множество новых значений RLIMIT
для различных систем и особенно linux 2.6: RLIMIT_PTHREAD
, RLIMIT_RTPRIO
, RLIMIT_RTTIME
и другие. Поддерживается расширение PRIO_THREAD
, если оно доступно в системе.
DBD::mysql 4.033
В новой версии драйвера СУБД MySQL DBD::mysql
исправлено несколько ошибок, включая утечку памяти в $sth->{ParamValues}
, патч для которой два с половиной года ждал своего часа в RT. Также внесены изменения для совместимости с последним релизом MySQL 5.7.9.
Minilla v3.0.0
Вышел новый мажорный релиз утилиты Minilla для подготовки дистрибутивов для CPAN. В новой версии совсем немного изменений, поэтому релиз скорее всего просто фиксирует стабильное состояние.
Search::Elasticsearch 2.00
Выпущен новый мажорный релиз официального клиента Elasticsearch. В данной версии по умолчанию используется API 2_0::Direct
, но по-прежнему поддерживаются предыдущие версии 1.0 и 0.90.
Devel::MAT 0.21
Обновлён модуль Devel::MAT
для анализа использования памяти Perl-программой. В новой версии обеспечена совместимость с Perl 5.22, а также обновлён формат хранения дампов.
← Perl 6 для веба | Содержание | Интервью с Рикардо Мартинесом →