Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка писем. Помогите с дескрипторами файлов. 
:(
    Опции темы
labertos
Дата 4.3.2012, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 4.3.2012

Репутация: нет
Всего: нет



Написал программку, которая раскидывает все письма с одного почтового ящика в отдельный файл. 
Каждое новое письмо начинается с новой строки "From "почтовый ящик" ".

Код

open unix, "unix.mailbox";
while ($_ = <unix>)
{
  if (/^From (\w+@\w+.\w+) /) 
  {
    $file=">> ".$1;
    open file;
    print file $_;
  } 
  else
  {
    print file $_;
  }
}


Нужно было сделать тоже самое, но при условии, что каждый файл будет открываться\закрываться лишь один раз. Решил сохранять дескриптор каждого файла в переменную, при открытии файла. А при необходимости использовать.
Код

select("дескриптор");
print "выражение";

Получилось это.
Код

open unix, "unix.mailbox";
while (<unix>)
{
 if (/^From (.*) /) 
 { 
  $filename=$1;
  if (-e($filename)) 
  {  
   select (${$filename}); 
   print $_;
  }
  else
  {
   $file=">> ".$filename;
   open file;
   print file $str;
   $file=~s/>> //;
   ${$filename}=select;
  }
 }
  else
  { 
   print $str;
  }
}

С Perl'ом знаком около недели. Просьба подсказать в чем ошибка. Варианты с использованием массивов не предлагать. Хочу с дескрипторами разобраться, раз взялся.
PM MAIL   Вверх
Pfailed
Дата 4.3.2012, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



В строке 18, видимо, нужно ${$filename}=file;
Плюс советую проверять не произошло ли ошибки при открытии файла.



--------------------
PM MAIL   Вверх
DurRandir
Дата 4.3.2012, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



Ну и стилистическое: use strict, use 3 arg open, print можно сразу отправлять в нужный fh, без лишних select(). Вместо ${$..} - хэши (но это поймает strict).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.