[Moscow.pm] Быстрый парсинг email-сообщений

Dennis S.Davidoff davydov на nexo.ru
Пт Фев 6 03:28:41 PST 2009


Быстрее бы попробовали, чем спрашивать ;-) Например:

mail:~/tmp/src# cat t.pl
#!/usr/bin/perl

local $/ = "";
my $header = <STDIN>;
my @body = <STDIN>;

print << "_EOF_";
--- Header ---
$header
--- Header (end) ---
--- Body ---
@body
--- Body (end) ---
_EOF_

Теперь любое письмо сырое отдайте скрипту так:
mail:~/tmp/src# cat mail | ./t.pl

Увидите - оно разделиться правильно ;-) Кстати, использование $/ вроде в 
Cookbook описано, не? Метод стар как мир. Я просто эти оочень давно 
пользовался - очень быстро работает.

On 06.02.2009 13:52, Dennis S.Davidoff wrote:
> А не проще (быстрее) так?
> 
> local $/ = "";
> my $header = <STDIN>;
> my @body = <STDIN>;
> 
> On 06.02.2009 13:50, Kaltashkin Eugene wrote:
>> Walery Studennikov пишет:
>>
>> ($header,$body) = split (/\n\n/,$message,2);
>> Читайте RFC :)
>>> Hi.
>>>
>>> Сейчас дописываем свой модуль для работы email-сообщениями
>>> (парсинг сообщений, сопоставление с шаблонами, поиск нужных сообщений 
>>> в mbox-ах,
>>> выдирание из них нужной информации и т.д. и т.п.).
>>> Основные требования:
>>> - модуль должен быть ультратёгким, без лишних зависимостей,
>>> - ультрабыстрым (т.к. будет перемалывать большие массивы данных).
>>>
>>> Когда модуль устаканиться, выложим на CPAN.
>>>
>>> Так вот, одна из загвоздок, с которой столкнулись -- это
>>> отделение header от body в rfc822-сообщениях.
>>>
>>> Т.е. нужно некое преобразование, которое
>>> на входе получает целое сообщение ($message),
>>> на выходе -- разрезанное: $header, $body.
>>>
>>> Сейчас используется:
>>> @$self{ qw/raw_header body/ } = ($body =~ m/(.+?)(?:\r?\n){2}(.+)/som);
>>> До этого использовалась комбинация index / substr.
>>> Однако, скорость преобразования при этом недостаточна.
>>>
>>> Вопрос: как это можно сделать наиболее быстро на Perl, не прибегая к XS.
>>>
>>> Ваши варианты? ;)
>>>
>>>   
>>
>> -- 
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
> 
> 
> ------------------------------------------------------------------------
> 
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org

-- 
Sincerely,
Dennis S.Davidoff
System/Network Engineer, Nexo Russia, Moscow
mailto: davydov на nexo.ru
tel. (495) 981-6211

----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3229 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20090206/ea4ddb4e/attachment.bin>


Подробная информация о списке рассылки Moscow-pm