Показаны сообщения с ярлыком perl. Показать все сообщения
Показаны сообщения с ярлыком perl. Показать все сообщения

воскресенье, 11 декабря 2011 г.

LWP и https

Для реализации защищенного протокола средствами LWP нужен модуль для perl Net::SSLeay
Но он не соберется без libssl-dev
Поэтому ставим
sudo aptitude install libssl-dev

Еще имеен смысл доустановить модуль для perl LWP::Protocol::https

вторник, 30 ноября 2010 г.

Net::SMTP::SSL и authentication required

Итак, понадобилось отправить через gmail.com почту по SSL через порт 465.
Для этого есть модуль Net::SMTP::SSL. Соединяется, но авторизация не проходит. При debug=1 выдает такую ошибку - authentication required.
Как оказалось, для успешной авторизации еще нужен модуль Authen::SASL, который за собой тянет еще что-то, которое возможно и не хватает для авторизации. Ну в общем, после доустановки - все работает.

воскресенье, 12 сентября 2010 г.

perl, hash и сортировка

Сортировка ключей по численному сравнению ассоциированных значений:
foreach(sort {$hash{$a} <=> $hash{$b}} keys %hash) {
print $_,'=',$hash{$_},"\n";
}


Сортировка ключей по алфавиту ассоциированных значений:
foreach $key(sort {$hash{$a} cmp $hash{$b}} keys %hash){
print $key, " = ", $hash{$key},"\n";
}

найдено тут http://www.opennet.ru/docs/RUS/perl_hash/, но все время забывается.

четверг, 9 сентября 2010 г.

Округление в perl

"Отбрасывает" дробную часть int ()

Округление с заданной точностью.
$rounded = sprintf("%.2f",$unrounded);

понедельник, 6 сентября 2010 г.

GD::Graph::lines и кириллица

Уже не первый раз сталкиваюсь с тем, что GD::Graph::lines не нормально выводит кириллицу в подписях и метках. А поменять ситуацию не выходило. В итоге принято решение патчить lines.pm (тот, что в /usr/lib/perl5/site_perl/5.10.0/GD/Graph) и добавить в него соответствующие методы:

sub set_label_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_label', @_) or return;
}

sub set_value_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_value', @_) or return;
}


sub set_x_label_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_x_label', @_);
}
sub set_y_label_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_y_label', @_);
}
sub set_x_axis_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_x_axis', @_);
}

sub set_y_axis_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_y_axis', @_);
}

sub set_values_font
{
my $self = shift;
$self->_set_font('gdta_values', @_);
}

sub set_legend_font # (font name)
{
my $self = shift;
$self->_set_font('gdta_legend', @_);
}

Теперь их своего скрипта их можно вызвать к примеру так:
my $graph = new GD::Graph::lines;
$graph->set_title_font("/usr/share/fonts/TTF/times.ttf",18);
$graph->set_label_font("/usr/share/fonts/TTF/times.ttf",14);
$graph->set_x_label_font("/usr/share/fonts/TTF/times.ttf",10);
$graph->set_y_label_font("/usr/share/fonts/TTF/times.ttf",10);
$graph->set_x_axis_font("/usr/share/fonts/TTF/times.ttf",10);
$graph->set_y_axis_font("/usr/share/fonts/TTF/times.ttf",10);
$graph->set_values_font("/usr/share/fonts/TTF/times.ttf",10);
$graph->set_legend_font("/usr/share/fonts/TTF/times.ttf",10);

Пути к шрифтам естественно свои подставить. И вся кириллица стала в норме.

суббота, 21 августа 2010 г.

Проблемы с LWP::Useragent протокола https и ошибка "501 Not Implemented"

Ну вот и я нарвался на странную работу модуля LWP::Useragent через прокси, а именно по https запросу, проксик выдал "501 Not Implemented"
но это если объявить работу через прокси

$ua->proxy(['http', 'https'], 'http://xxxxx.xxx.xxx:3128/');

Все начинает работать, только если закоментировать объявление proxy и определить прямо в скрипте переменную среды для прокси:

$ENV{HTTPS_PROXY} = $proxy;
$ENV{HTTPS_PROXY_USERNAME} = user;
$ENV{HTTPS_PROXY_PASSWORD} = pass;

Учитывая, что для работы требуется внешняя библиотека OpenSSL это вполне логично, откуда ей знать о проксиках объявленных в Userageny, но все же это настоящие грабли!

четверг, 12 августа 2010 г.

Perl и Cpan

Настройка прокси (proxy) в cpan:
cpan> o conf init /proxy/

суббота, 13 июня 2009 г.

Perl и парсер полного имени файла

Для разделения полного имени файла на директорию, само имя, и расширение очень удобен модуль File::Basename

use File::Basename;

$fullname = "/usr/local/src/perl-5.6.1.tar.gz";

$file = basename($fullname);
# file="perl-5.6.1.tar.gz"

$dir = dirname($fullname);
# dir="/usr/local/src"


($file,$dir,$ext) = fileparse($fullname, qr/\..*/);
# dir="/usr/local/src/" file="perl-5" ext=".6.1.tar.gz"

($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"

($file,$dir,$ext) = fileparse($fullname, qr/\.\D.*/);
# dir="/usr/local/src/" file="perl-5.6.1" ext=".tar.gz"

($file,$dir,$bak) = fileparse("/tmp/file.bak",
qr/~+$/, qr/\.(bak|orig|save)/)
# dir="/tmp/" file="file" ext=".bak"

($file,$dir,$bak) = fileparse("/tmp/file~",
qr/~+$/, qr/\.(bak|orig|save)/)
# dir="/tmp/" file="file" ext="~"

The File::Basename module provides functions to parse pathnames into their individual components. The dirname function pulls out the directory portion and basename the nondirectory portion. The more elaborate fileparse function picks out the full pathname into the directory name, the filename, and the suffix; you must supply a list of regular expressions describing the suffixes that interest you. The examples above illustrate how choice of suffix patterns affects the result. By default, these functions parse pathnames according to the native conventions of your current platform. The fileparse_set_fstype function selects a different platform's parsing rules, such as fileparse_set_fstype("VMS") to parse names using VMS rules, even when running on non-VMS systems.

понедельник, 15 декабря 2008 г.

Perl и Excel

Понадобилось статистику с сервера выгружать в виде excel файла. Для perl нашелся подходящий модуль Spreadsheet::WriteExcel. Описание и примеры. Есть почти все (форматы ячеек, формулы и пр.)

вторник, 18 ноября 2008 г.

Модули для perl

Вот теперь этот блог оправдывает свое название - "Записная книжка".

Это моя личная информация, необходимая только мне.
При переносе всех скриптов на другую машину мне нужны:

CGI::Session
Net::Jabber (пересборка make install)
Net:Telnet
Net::IMAP::Simple (пересборка make install)
Email::Simple
XBase
Spreadsheet::WriteExcel

воскресенье, 16 ноября 2008 г.

Perl и Unicode Windows.

Понадобилось мне в perl открыть и почитать файлик из винды в юникоде. И еще в файлике отсутствовал BOM (FF FE в первых байтах). Это был фрагмент из большого файла.
Локаль у меня utf8.

open (TXT, '<:encoding(UTF16)','file.txt') or die; c ходу не открыл, так как не нашел нужных ему первых байт и ругнулся на неверный BOM. решение: без явного указания перл принимает юникод "big-endian", а надо "little endian" и ругается на неверный BOM. Укажем явно кодировку UTF16-LE open (TXT, '<:encoding(UTF16-LE)','file.txt') or die; теперь порядок. Запись в файл аналогична открытию. open (TXT, '>:encoding(UTF16-LE)','file.txt') or die;

при этом BOM запишется сам в начало файла, если понадобиться записать его принудительно, то можно сделать так:

print TXT "\x{FEFF}"; # запись BOM (Byte Order Mark) для юникодного файла