Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > как выделить body из письма-массива?


Автор: frost84 19.9.2008, 11:03
доброго времени суток.
подскажите пожалуйста, как выделить body в массиве-письме, если известно что body и header разделены пустой строкой или 2-мя пустыми строками

использую Net::POP3;
...
$mess=$pop->login($user,$pass);
...
for ($i=1; $i<=$mess; $i++) {
     $message=$pop->get($i); #получаю текущее письмо
            foreach $head (@$message) {
                   $subj=$1
                   if ($head=~/Subject:\s(.*)/);  #выделяю Subject
                   ...
                   }
}

а вот выделить все body и сложить например в отдельный массив не получается(

Автор: shamber 19.9.2008, 11:17
frost84, а специальные модули использовать не хотите?

Автор: frost84 19.9.2008, 14:35
можно и модули, но желательно без них. 
ведь это можно сделать с помощью регэкспов.. только хотелось бы понять как

Автор: shamber 19.9.2008, 14:59
Добавьте счетчик пустых строк,
проверяйте пустая ли строка, если да то увеличиваем
если счетчки равен двум, то следующее это body smile
Код

if($head=~/^\r?\n$/){
       # увеличиваем счетчик

    }

Автор: frost84 19.9.2008, 17:58
понятно спасибо попробую и так тоже, а пока сделал так

foreach (@$message) {
    if ( !/^\n+|\r+/ ) {push (@arr,$_); $_ = undef;} else {last};
    }

в @$message остается body, а в @arr header.

интересно а насколько корректно делать $_ = undef ? 
значение становится неопределенным, но остается в массиве..

Автор: amg 20.9.2008, 08:30
Цитата(frost84 @  19.9.2008,  17:58 Найти цитируемый пост)
значение становится неопределенным, но остается в массиве..
Чтобы оно не оставалось в массиве:
Код
while ((my $line = shift @$message) !~ /^$/) {
    push @arr, $line;
}


Автор: frost84 20.9.2008, 15:58
спасибо большое.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)