Walery Studennikov пишет:
В общем, сплиттер header / body оптимизировали, это хорошо ;)

Теперь наибольшим тормозом стал парсер mbox-ов.
Сейчас используется такая конструкция:

    while ($_ = <$fh>) {
        if (m/^(From .* \w\w\w \w\w\w (\d|\s)\d \d\d:\d\d:\d\d \d+)\n$/) {
            _do_process_message( \$out, %param ) if $out;
            $out = '';
        }
        else {
            $out .= $_;
        }
    }

Можно ли придумать что-то быстрее для ПОТОКОВОГО парсинга?

поменять например mbox в maildir.
По поводу From
всё проще.

undef $/;
open IN,"<mail.txt";
$head = <IN>;
close IN;
$head =~ s#\n(\t|\s+) ##g;
$/ = "\n";
foreach my $line (split /\n/,$head)
{
my ($name,$value) = split (/\:\s/ ,$line);
print $name,":::",$value,"\n";
}

Дальше всё обрабатывается decode_qt, decode_base64 + iconv по вкусу.
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить