Написал программку, которая раскидывает все письма с одного почтового ящика в отдельный файл. Каждое новое письмо начинается с новой строки "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'ом знаком около недели. Просьба подсказать в чем ошибка. Варианты с использованием массивов не предлагать. Хочу с дескрипторами разобраться, раз взялся. |