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(); # создаем клиента
$client->SetCallBacks( # указываем обработчики событий:
onconnect => \&on_connect, # при подключении
onauth => \&on_auth, # при регистрации
message => \&on_message, # при получении сообщения
);
$client->Execute( # соединяемся с сервером
hostname=>$server, port=>$port,
username=>$username, password=>$password,
resource=>$resource, register=>1,
connectsleep=>0, connectattempts=>1,
);
# завершение программы произойдет в on_message
sub on_connect { # выполнится при подключении к серверу
print "Подключен к $server:$port\n";
}
sub on_auth { # выполнится при регистрации на сервере
print "Зарегистрирован как $username\n";
$client->MessageSend( # ОТПРАВЛЯЕМ СООБЩЕНИЕ
to=> $to_user. '/' .$resource,
subject=>'сообщение от Perl',
body=>'Привет, Jabber!'
);
}
sub on_message { # выполнится при получении сообщения
my $sid = shift; # извлекаем номер и текст
my $message = shift; # ответа и выводим его:
print "Тема:", $message->GetSubject(), "\n";
print "Сообщение:", $message->GetBody(), "\n";
$client->Disconnect(); # отключаемся от сервера
exit(0); # и завершаем работу
}
В этом примере демонстрируется прием программирования, распространенный при работе в многозадачной среде: главная программа организует бесконечный цикл обработки событий, для реагирования на которые вызываются обработчики событий. Конечно, помимо обмена сообщениями Jabber предоставляет целый набор средств для полноценного общения, а Perl дает возможность работать с ними.
Есть примеры использования Perl для разработки шлюзов между IP-сетями и беспроводными сетями. На Perl написан свободно распространяемый пейджинговый шлюз Sendpage (www.sendpage.org). Класс Net::SNPP занимается отправкой сообщений на пейджер по протоколу SNPP (Simple Network Paging Protocol), а модуль Net::SMS служит для работы со службой SMS-сообщений для клиентов GSM-телефонии. Теперь мало кого удивляет, что вскоре после появления очередной новой технологии передачи данных на CPAN выкладываются Perl-модули для работы с ней.
Крупную компьютерную сеть можно сравнить с живым организмом: сетевое оборудование и компьютеры - это ее органы, а линии связи - нервные волокна. Сеть ежеминутно меняет свое состояние, ее составные части могут "болеть" и "отмирать", сеть может "задыхаться" от чрезмерного объема передаваемых данных (сетевого трафика). Для мониторинга состояния сети, ее обслуживания и диагностики неисправностей применяются различные служебные программы. Некоторые из них написаны на языке Perl. В других случаях Perl применяется для "склеивания" разных программ в единую систему управления сетью. Если вспомнить, что Perl был создан системным администратором, то станет понятным, почему имеется так много модулей, так или иначе связанных с управлением сетями. В качестве простейшего примера можно привести стандартный класс Net::Ping, с помощью которого можно проверить работоспособность хоста по его IP-адресу. В ОС MS Windows это делается такой командой: