понедельник, 12 марта 2012 г.
Тесты на качество кода Perl
В рассылке Moscow.pm промелькнула интереснейшая ссылка Шаблонные тесты на качество кода Perl.
воскресенье, 11 марта 2012 г.
Как добавить информацию о репозитории в Build.PL?
Очень просто!
my $builder = Module::Build->new(
# ...
meta_merge => {
resources => {
repository => 'https://github.com/user/repo'
}
}
);
воскресенье, 12 февраля 2012 г.
(R)?ex. Легкое управление серверами
Нашел интересную утилиту (R)?ex. Утилита позволяет выполнять консольные команды на удаленных компьютерах, соединяясь с ними по ssh. Удобство и легкость заключается вот в чем. Пишется конфиг, где описываются различные задания, которые нужно автоматизировать, например, для выкатки проекта в на продакшн-сервера или команды для опроса состояния серверов, например, можно получить uptime или еще какой параметр. В общем все команды выполняемые в консоли. Так же можно загрузить файлы, сделать rsync и т.д. Получается некое подобие puppet + возможность посылать любые команды серверам. Конфиг пишется на Perl и выглядит очень симпатичным и понятным.
Написана утилита на Perl и найти ее можно на cpan - Rex
Написана утилита на Perl и найти ее можно на cpan - Rex
среда, 8 февраля 2012 г.
Ускоряем установку модулей Perl
Наткнулся на очень интересную возможность модуля Test::Harness. Если запускать установку модулей таким образом:
HARNESS_OPTIONS=j<n> cpanm Module::Name
Тесты при установке модуля будут выполнятся в <n> потоков, что значительно уменьшит время их исполнения.
понедельник, 12 сентября 2011 г.
вторник, 22 февраля 2011 г.
Module::CoreList - простой способ посмотреть поставляемые с перлом модули
Открыл для себя Module::CoreList.
Можно очень просто посмотреть, какие модули входят в поставку различных версий Perl.
Список версий Perl:
Список модулей для конкретной версии:
Можно очень просто посмотреть, какие модули входят в поставку различных версий Perl.
Список версий Perl:
corelist -v
Список модулей для конкретной версии:
corelist -v v5.10.1 | less
среда, 24 марта 2010 г.
Открыл для себя Inline::C
Как известно подключение С кода к Perl достаточно трудоемкое и реализуется через Perl XS. И меня эта сложно перодалимая стена останавливает, хотя конечно очень хочется писать быстрые модули. И вот недавно узнал про Inline::C.
Сам модуль Inline представляет собой фреймворк для поключения любого языка программирования к перлу. В часности Inline::C позволяет поключать C код. При первом запуске скрипта происходит компилирование C кода, при последующих запусках проверяется, изменился ли код или нет. Если не менялся, то компиляция не происходит.
После прочтения perlapi вполне можно писать полноценные сишный код, работающий с перловыми хешами массивами. И вообще можно сделать все что угодно. И уже после небольшой практики с Inline::C можно будет перейти к изучению XS. Подозреваю, что освоить его будет гораздо проще.
Вот написал простенький примерчик, разворачавающий строки вида "a-z0-9" в последовательности символов. На качество C кода не смотреть, я его плохо знаю.
Сам модуль Inline представляет собой фреймворк для поключения любого языка программирования к перлу. В часности Inline::C позволяет поключать C код. При первом запуске скрипта происходит компилирование C кода, при последующих запусках проверяется, изменился ли код или нет. Если не менялся, то компиляция не происходит.
После прочтения perlapi вполне можно писать полноценные сишный код, работающий с перловыми хешами массивами. И вообще можно сделать все что угодно. И уже после небольшой практики с Inline::C можно будет перейти к изучению XS. Подозреваю, что освоить его будет гораздо проще.
Вот написал простенький примерчик, разворачавающий строки вида "a-z0-9" в последовательности символов. На качество C кода не смотреть, я его плохо знаю.
use Inline C => DATA;
seq("1-3a-zv-d");
__DATA__
__C__
#include <stdio.h>
#include <string.h>
void print_seq(char start_s, char fin_s);
int seq(char* str) {
char start_s = '\0';
char fin_s = '\0';
int i;
for ( i = 0; i < strlen(str); i++ ) {
char s = str[i];
if ( s == '\0' ) break;
if ( s != '-' ) {
if (!start_s )
start_s = s;
else {
fin_s = s;
print_seq(start_s, fin_s);
start_s = fin_s = '\0';
}
}
}
return 0;
}
void print_seq(char start_s, char fin_s) {
int flag = start_s < fin_s ? 1 : 0;
while( start_s != fin_s ) {
printf("%c ", start_s);
start_s += flag ? 1 : -1;
}
printf("%c\n", fin_s);
}
Подписаться на:
Сообщения (Atom)