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