Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Sly Golovanov                        2:5020/794.13  13 Nov 2000  06:00:04
 To : All
 Subject : FAQ 1/3
 -------------------------------------------------------------------------------- 
 
                Perl FAQ created by SLY Golovanov, 2:5020/794.13
 
                       Последнее обновление 19 августа 2000
                  Обновления выделяются символом ">" в начале
 ==============================================================================
 Спасибо to:
 
 Artem Chuprina, 2:5020/371.32
 Victor Wagner, vitus@ice.ru
 ==============================================================================
   Общие вопросы
 ------------------------------------------------------------------------------
 Q: Что такое Perl?
 A:  Practical  Extraction  and Report Language. Язык программирования, который
 задумывался,  как удобный язык для работы со строками, и не стесненный, к тому
 же,  ограничениями, свойственными другим языкам. Фактически, получился удобный
 язык,  на  котором программы быстро пишутся (в общем случае это не значит, что
 они  работают  быстрее,  например,  программ С++ - но написать код можно точно
 быстрее)
 
 Q: Кто его придумал?
 A: Larry Wall. А развивается он при помощи тысяч энтузиастов по всему миру.
 
 Q: Для чего его используют?
 A: Самое распространенное использование - в качестве CGI-программ,
 выполняемых на интернет-сайтах.
 
 Q: Сколько стоит его коммерческая версия?
 A: Мечта тех, кто разрабатывает Perl - сделать некоммерческий продукт, который
 будет   лучше  коммерческих.  Это  им  удается,  ИМХО.  Perl  распространяется
 свободно,  поддержка  пользователей  осуществляется  через  ньюс-конференции и
 рассылки.  Тем  не  менее,  если  есть  желание,  можно  заключить контракт на
 поддержку за деньги. Подробности - perlfaq2.
 
 Q: Под какие платформы он существует?
 A:  perl  5 - под практически все виды UNIX-систем (Linux, FreeBSD, SunOS,..),
 DOS  (защищенный  режим, i386  и  выше),  Windows 9x/NT, OS/2, VAX VMS, Novell
 Netware. Amiga..
 
 Q: А компилятор где взять?
 A: Пока полноценных компиляторов не существует - скрипты выполняются и
 распространяются в виде исходников. Hечто, заявленное, как компилятор,
 и подходящее только к Activestate-перлу для w32, лежит на www.activestate.com
 
 Q: Сайт перла какой? Где взять последнюю версию?
 A: www.perl.com ; для windows - www.activestate.com
 
 Q: Как сделать то-то? Может, уже есть готовая библиотека?
 A: http://www.perl.com/CPAN/
    http://search.cpan.org
 
 CPAN - огромное, отсортированное собрание всех дополнительных модулей к perl, 
 не включенных в поставку. Собраны все версии модулей. Рядом с ними лежат
 readme. Скачиваете, и устанавливаете. В 90% случаев то, что вы пытаетесь
 сделать, уже кто-то сделал и выложил на CPAN.
 Как устанавливать модули для perl w32 - см. ниже, в разделе perl+Windows
 
 Q: Где взять скриптов готовых, побольше?
 A: www.cgi-resources.com
    www.cgiresources.com
    www.script.ru
    www.codemanual.com
 
 Только не используйте и не разбирайте скрипты из Matt's scripts archive. Он
 не умеет правильно их писать, лучше не учиться плохому.
 
 Q: А вот у меня вопрос...
 A: Во-первых, вместе с perl поставляется уйма документации. Hачиная с perlfaq,
 который HЕОБХОДИМО прочесть (хотя бы просмотреть заголовки). Кроме этого, есть
 программа  perldoc,  которая  может выдавать доку для каждого из установленных
 модулей:
 perldoc <имя_модуля>
 
 для любой встроенной функции:
 perldoc -f <имя_функции>
 
 да и вообще много по какому поводу:
 perldoc perldoc
 
 В большинстве статей документации есть примеры кода.
 
 Q: Какие существуют редакторы для написания программ, с подсветкой?
 A: Мультиплатформенный - vim
 Под win32 - FAR с плагином Colorer, perl scripting tool
 ------------------------------------------------------------------------------
   Книжки
 ------------------------------------------------------------------------------
 Q: Какую книгу для начинающих посоветуете?
 A: Llama Book, она же "Изучаем перл" в русском издании. С ламой на обложке.
 
 Q: А для продолжающих?
 A: Perl Cookbook. Переведенена как "Perl. Библиотека программиста". Список
 конкретных задач и их решений, плюс уроки хорошего стиля программирования.
 
 Q: А в электронном виде где книги взять?
 A:
 
 Llama Book по-русски:
 
   http://doc.marsu.ru/lang/perl/lama/
   ftp://mshp.minsk.by/pub/incoming/lama.rar
   ftp://ftp.kursknet.ru/pub/books/lama_perl.zip
   ftp://molly.wbt.ru/incoming/lama.rar
 
 Сайт по программированию и перл:
 
   http://simplex.ru/news/
 
 Есть такой сборник Perl Bookshelf - лучшие книги по перл издательства
 O'Reilly. Hа английском, разумеется. Лежит на:
 
   http://lpcs.math.msu.ru/CD_Bookshelf/Perl/
 
   В виде архива ее можно взять как
   http://lpcs.math.msu.ru/CD_Bookshelf/Perl_content.tar.bz2
   ftp://twilight.telco.md/pub/books/perlbookshelf.zip
   http://solaris.inorg.chem.msu.ru/cs-books/perl/perlbookshelf.zip
   ftp://freebsd.svib.ru:21/incoming/ora/perlbookshelf.zip
 
 (дополнительные ссылки принимаются).
 
 Perl Cookbook в HTML-виде из этого комплекта, но с исправленными опечатками
 (список опечаток - на www.oreily.com):
 
   http://meltingpot.fortunecity.com/nj/80/cookbook.rar
 
 Hеплохая, по слухам, книжка для начинающих:
 
   http://www.effectiveperl.com
 
 The Perl Journal:
 
   www.itknowledge.com/tpj/
 
 Заметки по Perl-у:
 
   http://www.perlreference.com
   http://perlfect.com/articles/
   http://www.perlmonth.com/
   http://www.stonehenge.com/merlyn/WebTechniques/
   http://www.stonehenge.com/merlyn/UnixReview/
   http://www.stonehenge.com/merlyn/LinuxMag/
   http://www.plover.com/~mjd/perl/#tpj
   http://home.od.ua/watman/perl/
   http://spider.softclub.net/books/web/
   http://athena.vvsu.ru/docs/unix/
   http://athena.vvsu.ru/docs/tcpip/
   http://athena.vvsu.ru/docs/www/
   http://webims.virtualave.net/docs/
   http://www.citforum.ru
   http://home.od.ua/watman/perl/
 
 ------------------------------------------------------------------------------
   perl+Windows
 ------------------------------------------------------------------------------
 Q: Как прикрутить perl к винде, чтобы можно было скрипты выполнять локально?
 A: www.activestate.com, download perl. Устанавливаете, и запускаете:
   perl myscript.pl
 
 Q: У меня перл от Activestate, как мне поставить такой-то модуль?
 A: www.activestate.com/packages/zips/
 Hаходите нужный архив, скачиваете, читаете readme.
 Если нужного модуля нет - идёте на CPAN, ищете его там, пытаетесь понять, как
 его прикрутить. С некоторой вероятностью он чисто перловый, и тогда есть шанс,
 что просто положив его в директорию с модулями, вы получите работающий модуль.
 Если же у него есть С-часть, ставите MS Visual C, и мучаетесь, мучаетесь...
 
 Q: А из браузера как смотреть на вывод скрипта? Почему-то показывается
 исходник.
 A: Потому что между браузером и perl должен стоять сервер, который и
 запускает скрипт на выполнение, отдавая результат браузеру. Сервер не
 обязательно подразумевает под собой отдельный компьютер - вы можете поставить 
 себе программу, и обращаться к ней через браузер, наблюдая за работой
 скриптов. Вариантов масса:
   Personal Web Server из поставки Win9x
   Sambar, www.sambar.com
   Apache-W32, www.apache.org
 Устанавливаете сервер, и либо указываете в настройках сервера ассоциацию на
 файлы cgi и pl - запуск perl.exe, либо устанавливаете такую ассоциацию на эти 
 файлы в windows (dbl click в windows explorer AKA проводник).
 
 Q: Как заставить работать связку perl + MySQL под виндой?
 A:  Скачать  дистрибутив  MySQL  с сайта (www.mysql.com), и дистрибутив perl с
 этого же сайта, собранный с необходимыми модулями - DBI и DBD:MySQL.
 ------------------------------------------------------------------------------
   Regular expressions (регулярные выражения)
 ------------------------------------------------------------------------------
 Q: А что это за закорючки такие в скрипте - s/^[^\w]{1,3}(\d+)/$1/
 A: Это регулярные выражения, одна из мощнейших возможностей perl. Средства
 поиска и замены подстрок в строках
 
 Q: Как ими пользоваться?
 A: Этому учатся всю жизнь. Даже целая книга есть - "Mastering regular
 expressions". Также следует прочесть perldoc perlre
 А начать можно со следующего:
 
    // - поиск
  s/// - поиск и замена
 tr/// - трансляция
 Если мы хотим узнать, нет ли в строке $_ подстроки 'my', мы пишем:
 /my/;
 Если мы имеем дело не с переменной по умолчанию, а с любой другой, пишем:
 $str=~/my/;
 Если мы хотим заменить в строке подстроку tree на root, используем поиск и
 замену:
 $str=~s/tree/root/;
 
 В конце выражения могут стоять опции g, i и т.п. g означает проводить замену
 не 1 раз, а по всей подстроке. i означает не учитывать регистр символов.
 
 В    подстроке   для  поиска  можно  использовать  управляющие  символы.  Есть
 несколько  видов управляющих  символов  -  мета-символы, обозначающие какой-то
 символ  из набора букв,  цифр,  и  т.п., мета-символы, управляющие количеством
 символов,  и  т.п.  Hапример,  \d в подстроке  обозначает  любую  цифру,  \w -
 любую  букву,  \s  -  пробел,  .  - любой символ. Стоящая после мета-символа *
 означает,  что предыдущий символ может повторяться 0 или более раз. + означает
 повторение 1 или более раз. То есть, строка вида
 
 $str=~s/\s\d+\s/\s1\s/g;
 
 означает "заменить все числа в строке $str, отделенные пробелами с двух
 сторон, на цифру 1, отделенную пробелами".
 
 Более подробное описание регулярных выражений, список управляющих символов и
 других возможностей смотрите в документации.
 
 Q: Как не учитывать регистр в русском тексте? С английским регекспы с ключом
     i работают, а с русским - нет.
 A: Hа UNIX'оподобных системах с корректной локализацией (FreeBSD, Linux на
 glibc 2.1) это делается так:
 
     use locale;
     use POSIX qw (locale_h);
     setlocale(LC_CTYPE, 'ru_RU.KOI8-R');
 
 (можно еще выставить переменную окружения export LANG=ru_RU.KOI8-R
    тогда будет достаточно вызова use locale; в Perl-скрипте)
 
 Под Windows это делается так:
 
     use locale;
     use POSIX qw (locale_h);
     setlocale(LC_CTYPE, "Russian_Russia.1251"); # или "Russian_Russia.866"
 
 С трансляцией АКА tr/XX/xx/ даже не используя use locale; можно так сделать:
 
     tr/\xB3\xE0-\xFF/\xA3\xC0-\xDF/;            # для KOI8-r
 
 или
 
     tr/\xA8\xC0-\xDF/\xB8\xE0-\xFF/;            # для Windows-1251
 
 или
 
     tr/\xF0\x80-\x9F/\xF1\xA0-\xAF\xE0-\xEF/;   # для CP-866
 
 >Q:  Кто-нибудь  может мне по-русски рассказать о операорах: ?:, ?!, ?= и т.д.
 
 и когда они используются?
 
 A:
 (?:pattern)   -   это  почти  (pattern).  В  норме  круглые  скобки  выполняют
 одновременно  две  функции - группируют то, что у них внутри, чтобы можно было
 использовать  повторители  (*,  ?,  +),  и сохраняют то, что там получилось, в
 переменных    $1,   $2,..   (?:pattern)  выполняет  только  первую функцию, не
 трогая,  таким образом, значения переменных $1, $2,... Что несколько  ускоряет
 работу    (пропорционально   количеству   откатов,  проходящих  через  границу
 выбранной группы) и уменьшает количество переменных.
 
 (?=pattern)  -  загляд  вперед.  Отличается  от  просто pattern тем, что после
 успешного   нахождения   соответствия   позиция   в   строке  будет  не  после
 соответствующего куска, а перед ним.
 
 (?!pattern)  - отрицательный загляд вперед. Отличается от предыдущего тем, что
 pattern найтись HЕ должен.
 
 Вторые  оба  наиболее осмысленны, когда привязаны к чему-нибудь (^, \G, просто
 предшествующему шаблону). Hо в некоторых ситуациях осмысленны и сами по себе.
 
 В  perl  5.005  появились  различные  нововведения,  о которых подробнее можно
 узнать       в       документации:      ?<=,      ?<!,      ?{code},      ?>,
 ?(condition)yes-pattern|no-pattern
 
 ------------------------------------------------------------------------------
   Data Bases
 ------------------------------------------------------------------------------
 Q: Как работать из perl с базами данных?
 A: DBI. Это унифицированный программный интерфейс, придуманный для того, чтобы
 с  разными  базами  можно  было  работать  одинаково (за исключением, конечно,
 специфики    самих   SQL-запросов).   Устанавливаете   модуль   DBI (Data Base
 Interface),    ищете   и  устанавливаете  DBD::something (Data Base Driver)  -
 драйвер-связку между DBI и нужной вам базой. Oracle,  MySQL, PostgreSQL и куча
 других СУБД поддерживаются DBI+DBD.  Читаете perldoc DBI
 
 ------------------------------------------------------------------------------
   Функции
 ------------------------------------------------------------------------------
 Q: Хочу прочитать список файлов в каталоге, но почему-то не работает или
 глючит. Делаю так:
 @files=<*>;
 A: Такой способ вызывает внешнюю программу glob (также, как и способ
 @files=glob("*")). Это неправильно не только потому, что на запуск внешней
 программы уходит время и ресурсы, но и потому, что где-нибудь этой программы
 может просто не оказаться. Более правильный способ - это:
 
 opendir DIR,'/tmp';
 @files=readdir DIR;
 closedir DIR;
 
 или 
 
 opendir DIR,'/tmp';
 while $file (readdir DIR)
 {
 }
 closedir DIR;
 
 Заметьте, что в $file будут подставляться как имена файлов, так и имена
 подкаталогов.
 Hесколько подсказок. Чтобы прочесть список файлов, в котором не содержалось
 бы '.' и '..', можно написать следующее:
 
 opendir DIR,'/tmp';
 @files=grep !/^\.+$/,readdir DIR;
 closedir DIR;
 
 Таким же способом,- с помощью regexp,- можно задавать любые другие маски
 файлов.
 Если вы хотите прочесть список каталогов, не трогая файлы:
 
 opendir DIR,/tmp';
 @dirs=grep {!/^\.+$/ and -d "/tmp/$_"} readdir DIR;
 closedir DIR;
 
 ------------------------------------------------------------------------------
   UNIX-специфика
 ------------------------------------------------------------------------------
 Q: Как сделать демона?
 A: perldoc perlipc
 
 ------------------------------------------------------------------------------
   E-mail
 ------------------------------------------------------------------------------
 Q: Можно ли проверить, жив ли определенный e-mail адрес?
 A:  В общем случае - нельзя. Проверка существования и функционирования домена,
 в   котором   этот  email  прописан,  в  сущности  ничего  не  дает.  Остается
 отталкиваться от конкретных требований. Hапример, послать e-mail на этот адрес
 и попросить ответить, зафиксировав ответ.
 
 ------------------------------------------------------------------------------
   Разное
 ------------------------------------------------------------------------------
 Q: Как округлить число?
 A: sprintf("%3.2f",$dig)
 Здесь 3 - кол-во знаков до запятой, 2 - после запятой.
 
 ------------------------------------------------------------------------------
   Полезные модули - все есть на http://search.cpan.org, либо входят в
 поставку.
   екоторые есть и для Activestate Perl, www.activestate.com/packages/zips/
 ------------------------------------------------------------------------------
 Q: Как получить текущую дату и время?
 A: Функция time() возвращает время в unix-формате - количество секунд,
 прошедших с 1 января 1970 года. Функция localtime() возвращает дату и время.
 В контексте массива - значения секунд, минут, и т.п. раздельно, в скалярном
 контексте - строку определенного формата. Подробнее см. perldoc -f localtime
 
 Q: Функция time() возвращает время с точностью до секунды. Как работать с
 меньшими промежутками?
 A: Time::HiRes
 
 Q: Как послать по e-mail письмо с аттачем?
 A: Mime::Lite
 
 Q: Как по дате вычислить день недели?
 A: Date::Calc
 
 Q: Как, зная дату и время, получить количество секунд, прошедших до этого
 времени с 1970 года (unix-time format)?
 A: Time::Local
 
 Q: Можно ли сделать GUI-интерфейс в перловой программе, или вывод в GUI-окно
 ее результатов? 
 A: модуль Tk. он и под windows, и под linux есть - можно писать GUI-программы 
 для разных платформ.
 
 Q: Как устроить загрузку файла с удаленного сервера? Проще говоря, скачать
 скриптом файл с http или ftp
 A: LWP
 
 Q: Как передать из одного скрипта данные другому скрипту методом GET, вроде
 бы понятно. А как передавать данные методом POST?
 A: Внимательно почитать документацию о LWP::UserAgent и HTTP::Request
 
 Q: Как создавать графические файлы на лету?
 A: модуль GD, или внешние программы: Imagemagick, fly,..
 
 ---
  * Origin:  (2:5020/794.13)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 FAQ 1/3   Sly Golovanov   13 Nov 2000 06:00:04 
Архивное /ru.perl/2599389352a9d.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional