utime($time_ftp, $time_ftp, $file); # и меняем время файла
}
$ftp->quit; # заканчиваем сеанс связи
Поскольку в классе Net::FTP реализованы остальные команды протокола FTP, с его помощью можно разрабатывать гораздо более сложные программы файлового обмена. Кроме этого класса, в архивах CPAN можно найти много других модулей для обмена файлами с FTP-серверами.
Электронная
почта (e-mail) была и остается одним из самых популярных сетевых сервисов. Электронная почта базируется на асинхронной доставке почтового сообщения (message) с одного почтового сервера на другой с помощью протокола SMTP (Simple Mail Transfer Protocol). Почтовые сообщения каждого пользователя хранятся на сервере в отдельном почтовом ящике (mail-box). Клиентская почтовая программа (Mail User Agent, MUA) забирает почту с сервера с помощью одной из версий протокола POP (Post-Office Protocol) или предоставляет пользователю непосредственный доступ к ящику на почтовом сервере с помощью протокола IMAP (Internet Mail Access Protocol).
Естественно, что в Perl имеется множество средств работы с электронной почтой. По электронной почте можно организовать автоматическое уведомление системных администраторов или пользователей о наступлении определенного события. С помощью сообщений электронной почты организуется регулярная автоматическая рассылка информации, например, счетов клиентам. При работе с почтой можно воспользоваться стандартными модулями - Net::SMTP для отправки сообщений и Net::POP3 для их получения. Приведем пример простой программы, отправляющей сообщение электронной почты:
use Net::SMTP; # используем класс для отправки e-mail
my $mail_server = 'shokhirev.com'; # почтовый сервер
my $to_user = 'mikhail@shokhirev.com'; # получатель
my $from_user = 'mshock@shadrinsk.net'; # отправитель
$smtp->datasend("Сообщаем о публикации на intuit.ru\n");
$smtp->datasend("курса лекций по Perl 5\n");
$smtp->dataend; # заканчиваю
$smtp->quit; # отсоединяюсь
Если нужно в программе проверить почтовый ящик на сервере, то с помощью класса Net::POP3 не составит труда написать короткую программу, принимающую электронную почту. Например, такую:
use Net::POP3; # используем класс для получения e-mail
my $mail_server = 'shadrinsk.net'; # почтовый сервер
if ($pop->login($user, $password) > 0) {# регистрируюсь
my $numbers = $pop->list; # получаю номера писем
foreach my $numbers (keys %$numbers) {# по номеру
my $message = $pop->get($numbers); # получаю письмо
print @$message; # печатаю его
$pop->delete($numbers); # удаляю с сервера
}
}
$pop->quit; # отсоединяюсь
На серверах CPAN есть множество программ для работы с электронной почтой, включая серверы. На Perl написана свободно распространяемая почтовая система с web-интерфейсом Open WebMail (openwebmail.org). На нем же написана и одна из самых известных и эффективных серверных систем фильтрации спама - SpamAssassin.
Системы мгновенного обмена сообщениями (instant messaging), иногда также называемые Интернет-пейджерами, получили огромное распространение: миллионы людей ежедневно общаются с помощью ICQ, Jabber, AOL Instant Messenger или Yahoo!Messenger. В архивах на сайте CPAN можно найти Perl-модули для работы со всеми этими системами. Хотя этот обмен сообщениями ориентирован на взаимодействие людей, его можно использовать для программного извещения пользователя о каком-либо событии. Для примера напишем программу, отправляющую сообщение с использованием открытого протокола мгновенного обмена сообщениями XMPP/Jabber (дополнительный модуль Net::Jabber нужно установить из архива CPAN). В примере после соединения с Jabber-сервером отправляется сообщение пользователю, а после получения от него ответа работа завершается:
use Net::Jabber; # подключаем класс работы с Jabber
use utf8; # в Jabber используется UTF-8
my $server = 'jabber.shadrinsk-city.ru'; # сервер
my $port = 5222; # порт
my $username = 'perl'; # отправитель
my $password = 'password'; # его пароль
my $resource = 'jud'; # ресурс
my $to_user = 'mshock@jabber.ru'; # получатель
my $client = new Net::Jabber::Client; # создаем клиента