Hello, Perl! Perl FAQ по-русски. Часть 7Дмитрий Репин aka cmapuk[0nline] Продолжаем практиковаться в программировании на языке Perl. В этой части мы рассмотрим вопросы сетевого программирования, а также узнаем о некоторых полезных модулях. Сетевые приложения с Net::XXX. Модули класса Net предоставляют возможность работать с различными протоколами прикладного уровня. Это и FTP, и почтовые POP3 и IMAP, и многие другие. Есть также такие возможности, как работа с через proxy. Краткий рассказ о работе с этими модулями и другую документацию можно взять на сайте http://www.pobox.com/ ~gbarr/libnet/. Вот небольшой обзор семейства Net: Net::FTP - Работа с FTP Все семейство этих модулей называется libnet (также как семейство модулей LWP называется libwww-perl), и вы можете использовать это название при поиске информации в поисковых системах. Большинство модулей работают одинаково как под *nix-системы, так и под всеми любимой и ненавидимой Windows. Проверим почту с сервера www.pisem.net use Net::IMAP::Simple; Примерно таким же образом происходит работа с другими модулями семейства Net Возможно, вам может понадобиться работать с сетевыми пакетами на низком уровне, например собирать/разбирать UDP-пакеты. Здесь вам понадобятся модули семейства NetPacket. Для каждого протокола нужно подключать модуль NetPacket::ИмяПрото-кола. Например NetPacket::UDP, NetPacket: :Ethernet, NetPacket::TCP и и.п. # Простейший POP3-сниффер из документации NetPacket::TCP Как произвести сжатие данных? Вам поможет модуль Compress::Zlib. Он позволяет не только работать с файлами, но и архивировать/разархивировать данные "на лету". use Compress::Zlib; Подробнее обо всех возможностях модуля - в perldoc Compress::Zlib. Шифрование данных. Вы наверняка интересовались, как шифровать и расшифровывать данные с помощью Perl. Здесь пригодится модуль Crypt::DES или его собратья (Crypt::Blowfish и т.п.). use Crypt::DES; Работа с файлами. Если вы не хотите изобретать механизмы различных манипуляций с файлами, то воспользуйтесь модулями семейства File File::Compare - Сравнение файлов Здесь первый парамер - ссылка на массив путей новых директорий. Второй - флажок true/false - сообщать о каждой операции или все делать "молча". Третий параметр у mkpath - права. Форматы текста. Переводы текста между различными форматами (TXT, POD, RTF, HTML, etc) - дело непростое, и лучше всего доверить его соответствующим модулям. Рассмотрим для начала семейство HTML. Объекты некоторых из модулей этого семейства интегрируются с LWP-обьектами. Чуть ниже вы это увидите. HTML::AsSubs - Построение страницы HTML-функциями POD-формат - формат для документации. В комплекте Perl есть утилиты pod2text, pod2html и т.п. для преобразования в более читабельный вид ;-). Кроме того, имеется семейство модулей POD::***, позволяющее работать с этим форматом и преобразовывать его в нормальное для чтения представление. Для работы с RTF-текстами имеются модули RTF::Document, RTF::HTML::Converter, и т.п.. Правда, эти модули очень плохо относятся к русским буквам и другим чуждым "буржуинским" программерам символам. Но это не беда. Откройте файл модуля RFT::HTML::Converter (и RFT::Text::Converter тоже) и в строке номер 77 сделайте следующую поправку: "$_;" на сhr($_). Иначе все символы, не являющиеся английскими буквами, превратятся в [КодASCII]. Очень силен в обращении с текстовыми данными модуль Text (точнее, его семейство). Это даже не модуль, а целый текстовый процессор, не хуже Word. use Text::Autoformat; И это самое малое, что можно сделать с текстом с помощью Text::***. Конвертирование форматов разных ОС, фильтрация, макросы, текстовая графика и многое другое. Что называется, "MustHave". С кодировками Unicode и всеми проблемами, с ней связанными, вам помогут справиться модули Unicode::*** Модуль Unicode::String позволяет работать со строками этой кодировки, не перекодируя их вручную. use Unicode::String qw(utf8 utf16 hex); Работать с форматом PDF (создавать, читать, писать) вам поможет модуль PDF со всеми своими подмодулями, а также семейство Text::PDF. Они предоставляют вам мощный интерфейс для всевозможных манипуляций с PDF-данными. Вы можете, например, написать скрипт, который будет выдавать красивый вариант страниц вашего сайта для печати. Правда, посетителям с подключением Dial-Up это будет не очень удобно =). use PDF::Create; LWP Cooking. Снова я возвращаюсь к вопросам работы с LWP, как и обещал, чтобы рассказать о модулях этого семейства подробнее. Несколько позже мы рассмотрим и модули более низкого уровня - Socket и IO::Socket. Самый простой способ использования LWP: cmd> perl -MLWP::Simple -e "getprint 'http://www.comprice.ru';" >index.html Если ваша консоль поддерживает перенаправление (символы <>), то индексная страница сайта будет записана в index.html. Теперь напишем что-нибудь посложнее. Создадим скрипт для скачивания архивов Perl-модулей с сайта ActiveState (www.activestate.com/ PPMPackages/zips/6xx-builds-only/). Для начала определимся, какими возможностями должна обладать программа. 1) Скачивание списка модулей. 2) Вывод списка в файл. 2) Скачивание модулей выборочно по списку 3) Возможность соединения через прокси-сервер. 4) Сохранение архивов в заданной директории. Теперь можно создать конфигурационный файл. # pmdown.cfg Наша программа будет принимать 2 параметра в командной строке: Ключ, определяющий действие, и имя файла, в следующих комбинациях: cmd> pmdown -l list.txt скачать список модулей и записать в файл list.txt; При запуске без параметров будем выдавать help. #!/path/to/perl Пример кода не блещет красотой исполнения, но зато так выглядит нагляднее. В качестве "домашнего задания" могу предложить оптимизировать код примера или расширить его возможности. Если ваш новый скрипт будет работать, значит, я не зря потратил время, взявшись за написание этой статьи ;-). Источник: "Компьютер Price", http://www.comprice.ru
| |
Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com |